home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Various / Amigan Amateur Radio Group Public Domain Disk 5 (1988)(Amigan Amateur Radio Group)(PD)[WB].zip / Amigan Amateur Radio Group Public Domain Disk 5 (1988)(Amigan Amateur Radio Group)(PD)[WB].adf / AmigaBBS / P1103.ASM < prev    next >
Assembly Source File  |  1989-01-01  |  61KB  |  3,704 lines

  1. *1988 P1103.ASM
  2.  NOPAGE
  3.  PLEN 86
  4.  
  5. CAPSIZ EQU 2440
  6. SENSIZ EQU 2440 5(512-24)
  7.  
  8. _LVOAbortIO     EQU -$1E0
  9. _LVOAddPort     EQU -$162
  10. _LVOAllocMem    EQU -$C6
  11. _LVOAllocSignal EQU -$14A
  12. _LVOCheckIO     EQU -$1D4
  13. _LVOClipBlit    EQU -$228
  14. _LVOClose       EQU -$24
  15. _LVOCloseDevice EQU -$1C2
  16. _LVOCloseWindow EQU -$48
  17. _LVODateStamp   EQU -$C0
  18. _LVODelay       EQU -$C6
  19. _LVODoIO        EQU -$1C8
  20. _LVOExamine     EQU -$66
  21. _LVOExecute     EQU -$DE
  22. _LVOExit        EQU -$90
  23. _LVOFindTask    EQU -$126
  24. _LVOFreeMem     EQU -$D2
  25. _LVOFreeSignal  EQU -$150
  26. _LVOGetMsg      EQU -$174
  27. _LVOLock        EQU -$54
  28. _LVOMove        EQU -$F0
  29. _LVOOpen        EQU -$1E
  30. _LVOOpenDevice  EQU -$1BC
  31. _LVOOpenLibrary EQU -$198
  32. _LVOOpenWindow  EQU -$CC
  33. _LVORead        EQU -$2A
  34. _LVORectFill    EQU -$132
  35. _LVORemPort     EQU -$168
  36. _LVOReplyMsg    EQU -$17A
  37. _LVOScrollRaster EQU -$18C
  38. _LVOSendIO      EQU -$1CE
  39. _LVOSetAPen     EQU -$156
  40. _LVOSetDrMd     EQU -$162
  41. _LVOText        EQU -$3C
  42. _LVOUnLock      EQU -$5A
  43. _LVOWait        EQU -$13E
  44. _LVOWaitIO      EQU -$1DA
  45. _LVOWrite       EQU -$30
  46. DEV_BEGINIO     EQU -$1E
  47.  
  48. X SET 0
  49. X SET X+4 DOSLIB
  50.  
  51. * DC.L 0       0)Mid Pointer
  52. * DC.L BBS_DIR 4)*Filename
  53. * DC.L 0       8)File Handle
  54. * DC.L 0      12)Buffer Addr
  55. * DC.L 0      16)Mem Size
  56. * DC.L 0      20)Byte cnt
  57.  
  58. DIR_R_FIB SET X
  59. DIR_W_FIB SET X+24
  60. USR_R_FIB SET X+48
  61. USR_W_FIB SET X+72
  62. MSG_R_FIB SET X+96
  63. MSG_W_FIB SET X+120
  64. FWD_R_FIB SET X+144
  65. BID_R_FIB SET X+168
  66. BID_W_FIB SET X+192
  67. X SET X+216
  68.  
  69. FSNEXT SET X
  70. LHFLG  SET X+1 Print Lister header
  71. BRATE  SET X+2
  72. C_SIG  SET X+3
  73. T_SIG  SET X+4
  74. R_SIG  SET X+5
  75. W_SIG  SET X+6
  76. MON    SET X+7
  77. B_ENAB SET X+8 1=BBS enabled
  78. B_RUN  SET X+9 1=BBS running
  79. C_RUN  SET X+10 1=Connected
  80. B_HLT  SET X+11 1=BBS halted in talk mode
  81. FR_RUN SET X+12 1=Forward in
  82. F7_RUN SET X+13 1=F7 forced into forward out
  83. *      SET X+14
  84. BADCNT SET X+15 Counts bad commands
  85. DSCFLG SET X+16 1=Disc in progress
  86. BINFLG SET X+17 1=Binary input
  87. ZFLG   SET X+18 ^Z inputed
  88. TIMFLG SET X+19 1=Timing
  89. DIEFLG SET X+20 1=Wait to die
  90. CMPCHR SET X+21 Lx
  91. C_HIST SET X+22 CON history
  92. CLOCK1 SET X+23 Timeout in seconds
  93. CLOCK2 SET X+24 Up counter
  94. STATUS SET X+25 TNC Status
  95. LLCNT  SET X+26 LL nn count
  96. CK_FLG SET X+27 0=No Kill found
  97. CR_FLG SET X+28 0=No Read found
  98. DIRCHG SET X+29 0=No changes in DIR
  99. GLINER SET X+30 1=GetLine error
  100. NRNXT  SET X+31 1=Look for NETROM conn next
  101. PORT   SET X+32 0=Main port 1=Alt port
  102. FSFULL SET X+33 1=Ser Fifo full
  103. SIDBID SET X+34 1=Bid type BBS
  104. BIDCHG SET X+35 1=Bid table changed
  105. ARROW  SET X+36 > in getlin
  106. STACNT SET X+37 0=Status run out
  107. X SET X+38
  108.  
  109. PLINW  SET X char cnt for line print
  110. CAPCNT SET X+2
  111. CX     SET X+4
  112. CY     SET X+6
  113. WD     SET X+8
  114. HT     SET X+10
  115. LINPTR SET X+12
  116. SENCNT SET X+14
  117. RS_IN  SET X+16
  118. RS_OUT SET X+18
  119. X SET X+20
  120.  
  121. A0SAV  SET X
  122. X SET X+4
  123.  
  124. GFXBAS SET X
  125. INTBAS SET X+4
  126. FHCAPT SET X+8
  127. FHSEND SET X+12
  128. T_R    SET X+16
  129. R_R    SET X+20
  130. W_R    SET X+24
  131. MYWIND SET X+28
  132. CHRCNT SET X+32
  133. LINCNT SET X+36
  134. SENPNT SET X+40
  135. STACKB SET X+44 Stack at start BBS
  136. U_PTR  SET X+48 Pointer to USER data in file
  137. LASTPT SET X+52 Ptr to DIR entry in file
  138. NXTMSG SET X+56 Next Message number
  139. CMPMSG SET X+60 Compare Msg #
  140. SIZMSG SET X+64 Msg size cntr
  141. NXTLST SET X+68 List msg# update
  142. BIDADR SET X+72 > Bid
  143. X SET X+76
  144.  
  145. TIMLIN SET X B.12 Time temp    861020230059
  146. X SET X+12
  147.  
  148. U_LINE SET X
  149. U_CALL SET X    B.8  User call
  150. U_YEAR SET X+8  B.10 User last date 8803242027
  151. U_BID  SET X+19 B.1  BBS Bid letter
  152. U_CNT  SET X+20 B.4  User checkins
  153. U_MSG  SET X+26 B.4  User last msg
  154. U_NAME SET X+32 B.22 User name
  155. X SET X+54
  156.  
  157. ABCDT1 SET X W.3  ASCII packed BCD Temp
  158. X SET X+6+2
  159. ABCDT2 SET X W.3  Second operand
  160. X SET X+6+2
  161. SCHARS SET X W.1  Chars sent over serial
  162. X SET X+2
  163.  
  164. DAYCNT SET X L.3 DAYS since 780101, MINS, TICKS
  165. X SET X+12
  166.  
  167. YEAR   SET X
  168. MONTH  SET X+2
  169. DAY    SET X+4
  170. HOUR   SET X+6
  171. MIN    SET X+8
  172. SEC    SET X+10
  173. X SET X+12
  174.  
  175. HEXTMP SET X B.10
  176. X SET X+10
  177. HDRLIN SET X L.21
  178. X SET X+84
  179. CONSTR SET X L.21
  180. X SET X+84
  181. CMPLIN SET X B.130
  182. *Msg# TR  Size To     From   @ BBS  Date  Time Title
  183. *  96 BN 65211 WB3HVJ WA3MNT KA3JAI 8701011311 AUTO
  184. *012345678901234567890123456789012345678901234567890
  185. X SET X+132
  186.  
  187. BIDBUF SET X L.21
  188. X SET X+84
  189.  
  190. MONON  SET X  $A,7,'     ',0
  191. X SET X+8
  192.  
  193. LSTLIN SET X L.21 DIR list line
  194. X SET X+84
  195. FWDTMP SET X L.21 SP N3ET < N3ET @ BBS $BID 
  196. X SET X+84
  197.  
  198. BBS_MSG SET X 'B:'  DS.B 32
  199. X SET X+36
  200.  
  201. X SET (X!7)+1  LONG WORD ALIGN
  202. TMPMEM SET X B.$107  fib_SIZEOF=$107
  203. X SET X+$108
  204. CNAME  SET X B.32
  205. X SET X+32
  206. XNAME  SET X B.32
  207. X SET X+32
  208. TBUFF  SET X B.640
  209. X SET X+640
  210. SEROUT SET X
  211. X SET X+256
  212. FSBEGN SET X
  213. X SET X+256
  214. RBUFF  SET X B.512
  215. X SET X+512
  216. CBUFF  SET X B.12
  217. X SET X+12
  218. BUFSEN SET X B.SENSIZ
  219. X SET X+SENSIZ
  220. BUFCAP SET X B.CAPSIZ
  221. X SET X+CAPSIZ
  222.  
  223. START
  224.  LEA.L  DOSNAM(PC),A1
  225.  MOVEQ  #0,D0
  226.  MOVE.L 4,A6
  227.  JSR    _LVOOpenLibrary(A6)
  228.  MOVE.L D0,DOSP
  229.  
  230.  MOVE.L #X,D0
  231.  BSR    ALLOC1
  232.  MOVE.L D0,A4
  233.  
  234.  MOVE.L DOSP(PC),(A4)
  235.  
  236.  LEA    INTNAM(PC),A1
  237.  JSR    _LVOOpenLibrary(A6)
  238.  MOVE.L D0,INTBAS(A4)
  239.  
  240.  LEA    GRANAM(PC),A1
  241.  JSR    _LVOOpenLibrary(A6)
  242.  MOVE.L D0,GFXBAS(A4)
  243.  BEQ    ABORT
  244.  
  245.  LEA    BBS_DIR(PC),A0
  246.  MOVE.L A0,DIR_R_FIB+4(A4)
  247.  MOVE.L A0,DIR_W_FIB+4(A4)
  248.  LEA    BBS_USR(PC),A0
  249.  MOVE.L A0,USR_R_FIB+4(A4)
  250.  MOVE.L A0,USR_W_FIB+4(A4)
  251.  LEA    BBS_MSG(A4),A0
  252.  MOVE.W #'B:',(A0)
  253.  MOVE.L A0,MSG_R_FIB+4(A4)
  254.  MOVE.L A0,MSG_W_FIB+4(A4)
  255.  LEA    BBS_FWD(PC),A0
  256.  MOVE.L A0,FWD_R_FIB+4(A4)
  257.  LEA    BBS_BID(PC),A0
  258.  MOVE.L A0,BID_R_FIB+4(A4)
  259.  MOVE.L A0,BID_W_FIB+4(A4)
  260.  
  261.  MOVE.W #14,CY(A4)
  262.  MOVEQ  #1,D1
  263.  MOVE.B D1,MON(A4)
  264. * MOVE.B #3,BRATE(A4)    ;3=9600
  265.  BSR    OPENW
  266.  MOVE.L D0,A3
  267.  MOVE.L $2E(A3),A1      ;wd_WScreen
  268.  LEA    NewWindow+4(PC),A0
  269.  MOVE.L 12(A1),(A0)     ;NewWindow sizes
  270.  MOVE.L MYWIND(A4),A0
  271.  JSR    _LVOCloseWindow(A6)
  272.  BSR    OPENW
  273.  BSR    SET_WDHT
  274.  
  275.  BSR    DO_ALLOC        ;Timer Request
  276.  MOVE.L D0,T_R(A4)
  277.  LEA    MT_RS(PC),A0
  278.  BSR    DOCREATE
  279.  MOVE.B D5,T_SIG(A4)
  280.  MOVE.L T_R(A4),A1
  281.  MOVE.L D0,$E(A1)       ;MN_REPLYPORT
  282.  MOVEQ  #5,D0
  283.  MOVE.L D0,8(A1)        ;LN_TYPE=NTMESSAGE
  284.  CLR.B  9(A1)           ;LN_PRI=0
  285.  BSR    OPEN_TIM
  286.  
  287.  BSR    DO_ALLOC        ;Read Request
  288.  MOVE.L D0,R_R(A4)
  289.  MOVE.L D0,A0
  290.  MOVE.B #$34,$4F(A0)     ;io_SerFlags=SERF_SHARED|RAD_BOOGIE|7WIRE
  291.  LEA    MR_RS(PC),A0
  292.  BSR    DOCREATE
  293.  MOVE.B D5,R_SIG(A4)
  294.  MOVE.L R_R(A4),A1
  295.  MOVE.L D0,$E(A1)
  296.  BSR    OPEN_SERIAL
  297.  MOVE.L R_R(A4),A0
  298.  MOVE.W #2,$1C(A0)      ;IOSer.io_Command=CMD_READ
  299.  MOVEQ  #1,D0
  300.  MOVE.L D0,$24(A0)      ;IOSer.io_Length=1
  301.  LEA    RS_IN(A4),A1
  302.  MOVE.L A1,$28(A0)      ;IOSer.io_Data=(APTR) &RS_IN[0]
  303.  
  304.  BSR    DO_ALLOC        ;Write Request
  305.  MOVE.L D0,W_R(A4)
  306.  MOVE.L D0,A0
  307.  MOVE.B #$34,$4F(A0)     ;io_SerFlags=SERF_SHARED|RAD_BOOGIE|7WIRE
  308.  
  309.  LEA    MW_RS(PC),A0
  310.  BSR    DOCREATE
  311.  MOVE.B D5,W_SIG(A4)
  312.  MOVE.L W_R(A4),A1
  313.  MOVE.L D0,$E(A1)
  314.  BSR    OPEN_SERIAL
  315.  
  316.  MOVE.L W_R(A4),A0
  317.  MOVE.W #3,$1C(A0)      ;IOSer.io_Command=CMD_WRITE
  318.  LEA    RS_OUT(A4),A1
  319.  MOVEQ  #1,D0
  320.  MOVE.L D0,$24(A0)      ;IOSer.io_Length=1
  321.  MOVE.L A1,$28(A0)      ;IOSer.io_Data=(APTR) &RS_OUT[0]
  322.  
  323.  MOVE.L R_R(A4),A0
  324.  MOVE.B #$34,$4F(A0)    ;io_SerFlags=SERF_SHARED|RAD_BOOGIE|7WIRE
  325.  MOVEQ  #8,D0
  326.  MOVE.B D0,$4C(A0)      ;io_ReadLen=8
  327.  MOVE.B D0,$4D(A0)      ;io_WriteLen=8
  328.  MOVEQ  #1,D0
  329.  MOVE.L D0,$30(A0)      ;io_CtlChar=1  XON,XOFF,INQ,ACK
  330.  
  331.  BSR    TIMSTR          ;Start Timer
  332.  
  333.  MOVEQ  #' ',D4         ;D4 is SPACE
  334.  
  335.  LEA    START(PC),A0    ;Start/end addr
  336.  MOVE.L A0,CHRCNT(A4)
  337.  MOVE.L A4,LINCNT(A4)
  338.  BRA    F3_KEY
  339.  
  340. ***
  341. MAIN; main loop - Waits for Serial Read or Window input
  342. *
  343.  BSR    WAIT
  344. CKIO ;
  345.  BSR    GCHR_SER
  346.  BEQ    CKKEY           ;No Serial
  347.  TST.B  B_RUN(A4)
  348.  BEQ.S  1$
  349.  TST.B  B_HLT(A4)
  350.  BNE.S  1$
  351.  RTS
  352.  
  353. 1$
  354.  CMP.B  #$1A,D7         ;^Z
  355.  BNE.S  5$
  356.  MOVEQ #'^',D7
  357. 5$
  358.  CMP.B #$1F,D7
  359.  BLS.S 6$
  360.  CMP.B #$7F,D7
  361.  BCS.S 7$
  362. 6$
  363.  CMP.B #7,D7            ;Drop ^ chars
  364.  BCS   CKIO
  365.  CMP.B #$A,D7
  366.  BHI   CKIO
  367. 7$
  368.  TST.B  MON(A4)
  369.  BNE.S  FILL
  370.  BSR    PCHR_W
  371.  
  372. ***
  373. FILL; RBUFF with line of text
  374. *
  375.  CMP.B  #8,D7           ;BS
  376.  BNE.S  1$
  377.  SUBQ.W #1,LINPTR(A4)
  378.  BPL    CKIO
  379.  BRA    ENDI
  380.  
  381. 1$
  382.  MOVE.W LINPTR(A4),D0
  383.  CMP.W  #512,D0
  384.  BEQ    CKIO
  385.  LEA    RBUFF(A4),A0
  386.  ADDA.W D0,A0
  387.  MOVE.B D7,(A0)+
  388.  ADDQ.W #1,D0
  389.  MOVE.W D0,LINPTR(A4)
  390.  CMP.B  #$A,D7
  391.  BNE    CKIO
  392.  CLR.B  (A0)
  393.  TST.B  MON(A4)
  394.  BEQ    CAPMOD          ;Plain text
  395.  SUBQ.W #1,D0
  396.  BEQ    ENDI            ;Blank line
  397.  
  398. ***
  399. ISCALL; Does RBUFF contain a call string
  400. *
  401.  MOVEQ  #0,D0
  402.  LEA    RBUFF(A4),A0
  403. 1$
  404.  ADDQ.W #1,D0
  405.  MOVE.B (A0)+,D7
  406.  BEQ.S  MONMOD   c=0
  407.  CMP.B  #'-',D7  c=invalid
  408.  BLT.S  MONMOD
  409.  CMP.B  #4,D0    i<5
  410.  BLT.S  1$
  411.  CMP.B  #10,D0   i>10
  412.  BGT.S  MONMOD
  413.  CMP.B  #'>',D7  c=>
  414.  BNE.S  1$
  415.  
  416.  LEA    RBUFF(A4),A0    ;New call ck
  417.  LEA    CBUFF(A4),A1
  418.  MOVEQ  #10,D3
  419. NEWCAL
  420.  CMPM.B (A0)+,(A1)+
  421.  DBNE   D3,NEWCAL
  422.  BEQ.S  ENDI            ;Same call
  423.  
  424.  LEA    RBUFF(A4),A0    ;Update call
  425.  LEA    CBUFF(A4),A1
  426.  MOVEQ  #10,D3
  427. 1$
  428.  MOVE.B (A0)+,(A1)+
  429.  DBEQ   D3,1$
  430.  
  431.  MOVEQ  #$A,D7
  432.  BSR    PCHR_F_W
  433. MONMOD
  434.  LEA    RBUFF(A4),A0
  435.  LEA    TBUFF(A4),A1
  436. 1$
  437.  MOVE.B (A0),D0
  438.  OR.B   (A1),D0
  439.  BEQ.S  ENDI            ;DUPE
  440.  CMPM.B (A0)+,(A1)+
  441.  BEQ    1$
  442.  
  443.  LEA    RBUFF(A4),A0    ;New text
  444.  LEA    TBUFF(A4),A1
  445. 2$
  446.  MOVE.B (A0)+,(A1)+
  447.  BNE    2$
  448.  SUBQ.L #1,A0
  449.  CMP.B  #$A,-(A0)
  450.  BNE.S  4$
  451. 3$
  452.  CMP.B  -(A0),D4      ;Wack trailing spaces
  453.  BEQ.S  3$
  454.  CMP.B  #9,(A0)
  455.  BEQ    3$
  456.  ADDQ.L #1,A0
  457.  MOVE.B #$A,(A0)+
  458.  CLR.B  (A0)
  459. 4$
  460.  LEA    RBUFF(A4),A0
  461.  BSR    PLIN_W
  462. CAPMOD
  463.  LEA    RBUFF(A4),A0
  464.  BSR    PLIN_F
  465. ENDI
  466.  CLR.W  LINPTR(A4)
  467.  BSR    CKBBS
  468.  BRA    CKIO
  469.  
  470. ***
  471. CKKEY; Check for keyboard or mouse or send
  472. *
  473.  TST.B  FSFULL(A4)
  474.  BNE.S  NXT_MSG
  475.  TST.L  FHSEND(A4)
  476.  BEQ.S  NXT_MSG
  477.  BSR    GCHR_FIL   ;Get READ file char & send serial
  478.  BSR    CTSTST
  479.  BEQ    CKIO
  480.  
  481. NXT_MSG
  482.  BSR    GET_MSG
  483.  BEQ    MAIN
  484.  BMI.S  FUNKY
  485.  MOVE.B D0,D7
  486.  BSR    PCHR_S  ;Send Serial, TNC echo
  487.  BRA    NXT_MSG
  488.  
  489. FUNKY
  490.  SUB.B  #$5F,D7 ;$5F
  491.  BEQ    HELP_KEY
  492.  ADDQ.B #6,D7   ;$59
  493.  BEQ    ENDALL       ;F10
  494.  ADDQ.B #1,D7   ;$58
  495.  BEQ    F9_KEY       ;F9
  496.  ADDQ.B #1,D7   ;$57
  497.  BEQ    F8_KEY       ;F8
  498.  ADDQ.B #1,D7   ;$56
  499.  BEQ    MYFWD        ;F7
  500.  ADDQ.B #1,D7   ;$55
  501.  BEQ    DO_NEWCLI    ;F6
  502.  ADDQ.B #1,D7   ;$54
  503.  BEQ    F5_KEY       ;F5
  504.  ADDQ.B #2,D7   ;$52
  505.  BEQ    F3_KEY       ;F3
  506.  ADDQ.B #1,D7   ;$51
  507.  BEQ.S  F2_KEY       ;F2
  508.  ADDQ.B #1,D7   ;$50
  509.  BNE    NXT_MSG
  510.  
  511.  
  512. ***
  513. F1_KEY; Capture toggle
  514. *
  515.  TST.L  FHCAPT(A4)
  516.  BEQ.S  1$
  517.  BSR    CLSCAP
  518.  BRA    HELP_KEY
  519. 1$
  520.  LEA    MCAPT(PC),A0
  521.  BSR    PLIN_W
  522.  LEA    CNAME(A4),A0
  523.  BSR    FILENAME
  524.  BEQ    DOMERROR
  525.  BSR    OPNCAP
  526.  BEQ    DOMERROR
  527.  BRA    HELP1
  528.  
  529.  
  530. ***
  531. F2_KEY; Open/close read file to send serial
  532. *
  533.  TST.L  FHSEND(A4)
  534.  BEQ.S  NEW_READ
  535.  BSR    CLSSND
  536.  LEA    MERROR(PC),A0
  537.  BSR    PLIN_W
  538.  BRA    HELP_KEY
  539.  
  540. NEW_READ
  541.  LEA    MSEND(PC),A0
  542.  BSR    PLIN_W
  543.  LEA    XNAME(A4),A0
  544.  BSR    FILENAME
  545.  BEQ    DOMERROR
  546.  
  547. *** Open read file to send chars over serial
  548.  MOVE.L #1005,D2
  549.  MOVE.L A0,D1           ;XNAME
  550.  MOVE.L (A4),A6
  551.  JSR    _LVOOpen(A6)
  552.  MOVE.L D0,FHSEND(A4)
  553.  BEQ    DOMERROR
  554.  CLR.W  SENCNT(A4)
  555.  BRA.S  HELP_KEY
  556.  
  557.  
  558. ***
  559. F3_KEY; Next lower Baud rate
  560. *
  561.  MOVE.L R_R(A4),A1
  562.  MOVE.L 4,A6
  563.  JSR    _LVOAbortIO(A6)
  564.  
  565.  MOVEQ  #0,D0
  566.  MOVE.B BRATE(A4),D0
  567.  SUBQ   #1,D0
  568.  BGE.S  F3K1
  569.  MOVEQ  #3,D0           ;# rates-1
  570. F3K1
  571.  MOVE.B D0,BRATE(A4)
  572.  ASL.W  #1,D0
  573.  LEA    BRATEV(PC),A0
  574.  MOVE.W 0(A0,D0.W),D0
  575.  BSR    DO_RR_BEGIN
  576.  BRA.S  HELP_KEY
  577.  
  578. ***
  579. F8_KEY; Toggle Halt BBS - talk mode
  580. *
  581.  LEA    MECHOY(PC),A0
  582.  EOR.B  #1,B_HLT(A4)
  583.  BNE.S  1$
  584.  LEA    MECHON(PC),A0
  585. 1$
  586.  MOVE.B B_HLT(A4),D3
  587.  ADDQ.B #1,B_HLT(A4)
  588.  BSR    DUMPER
  589.  MOVE.B D3,B_HLT(A4)
  590.  BRA.S  HELP_KEY
  591.  
  592. ***
  593. F9_KEY; Toggle BBS allowed
  594. *
  595.  EOR.B  #1,B_ENAB(A4)
  596. HELP1
  597.  CLR.B  C_HIST(A4)
  598.  BRA.S  HELP_KEY
  599.  
  600. ***
  601. F5_KEY; Toggle MON mode
  602. *
  603.  EOR.B  #1,MON(A4)
  604.  
  605. ***
  606. HELP_KEY; Status
  607. *
  608.  LEA    MONON(A4),A0
  609. * MOVE.W #$A07,(A0)+
  610.  MOVEQ  #' ',D0
  611.  TST.B  B_RUN(A4)
  612.  BEQ.S  0$
  613.  MOVEQ  #'^',D0
  614. 0$
  615.  MOVE.B D0,(A0)+
  616.  MOVEQ  #' ',D0
  617.  TST.B  MON(A4)
  618.  BEQ.S  1$
  619.  MOVEQ  #'M',D0
  620. 1$
  621.  MOVE.B D0,(A0)+
  622.  MOVEQ  #' ',D0
  623.  TST.B  B_ENAB(A4)
  624.  BEQ.S  5$
  625.  MOVEQ  #'B',D0
  626. 5$
  627.  MOVE.B D0,(A0)+
  628.  MOVEQ  #' ',D0
  629.  TST.B  C_HIST(A4)
  630.  BEQ.S  7$
  631.  MOVEQ  #'C',D0
  632. 7$
  633.  MOVE.B D0,(A0)+
  634.  MOVE.W #$2000,(A0)+
  635.  
  636.  MOVEQ  #0,D0
  637.  MOVE.B BRATE(A4),D0
  638.  ASL.L  #1,D0
  639.  LEA    BRATEV(PC),A1
  640.  ADDA.W D0,A1
  641.  MOVE.W (A1),D0
  642.  MOVE.L $BFD000,-(SP)
  643.  MOVE.L LINCNT(A4),-(SP)
  644.  MOVE.L CHRCNT(A4),-(SP)
  645.  MOVE.L D0,-(SP)
  646.  LEA    MOPEN(PC),A0
  647.  TST.L  FHCAPT(A4)
  648.  BNE.S  9$
  649.  LEA    MCLOSD(PC),A0
  650. 9$
  651.  MOVE.L A0,-(SP)
  652.  PEA    CNAME(A4)
  653.  PEA    MONON(A4)
  654.  PEA    START(PC)
  655.  PEA    FMT2(PC)
  656.  BSR    SPRINT
  657.  LEA    36(SP),SP
  658.  LEA    START(PC),A0
  659.  
  660.  BSR    PLIN_W
  661.  BRA    NXT_MSG
  662.  
  663.  
  664. ***
  665. DO_NEWCLI; DOS cmd
  666. *
  667.  LEA    NEWCLI(PC),A0
  668.  MOVE.L A0,D1
  669.  CLR.L  D2
  670.  CLR.L  D3
  671.  MOVE.L (A4),A6
  672.  JSR    _LVOExecute(A6)
  673.  BNE    NXT_MSG
  674.  
  675. ***
  676. DOMERROR; Print ERROR
  677. *
  678.  BSR    DOMERR1
  679.  BRA    NXT_MSG
  680.  
  681.  
  682. ***
  683. ENDALL; Clean up and exit program
  684. *
  685.  MOVE.B B_RUN(A4),D0
  686.  BEQ.S  1$
  687.  BRA    CMD_B
  688. 1$
  689.  ADDQ.B #1,DIEFLG(A4)
  690.  BSR    WAIT
  691.  MOVE.B TIMFLG(A4),D0
  692.  BNE    1$              ;Wait for timer to clear
  693.  
  694.  BSR    CLSCAP
  695.  BSR    CLSSND
  696.  MOVE.L R_R(A4),A1
  697.  MOVE.L 4,A6
  698.  JSR    _LVOCloseDevice(A6)
  699.  MOVE.L R_R(A4),A0
  700.  BSR    DELETEPORT
  701.  MOVE.L W_R(A4),A1
  702.  JSR    _LVOCloseDevice(A6)
  703.  MOVE.L W_R(A4),A0
  704.  BSR    DELETEPORT
  705.  MOVE.L T_R(A4),A1
  706.  JSR    _LVOCloseDevice(A6)
  707.  MOVE.L T_R(A4),A0
  708.  BSR    DELETEPORT
  709. EXIT1
  710.  MOVE.L MYWIND(A4),A0
  711.  MOVE.L INTBAS(A4),A6
  712.  JSR    _LVOCloseWindow(A6)
  713. ABORT
  714.  MOVE.L #X,D0
  715.  MOVE.L A4,A1
  716.  MOVE.L 4,A6
  717.  JSR    _LVOFreeMem(A6)
  718. MEMFAIL                 ;Needs A6 set!
  719.  MOVE.L DOSP(PC),A6
  720.  MOVEQ  #0,D1
  721.  JMP    _LVOExit(A6)    ;gone
  722.  
  723. ***
  724. OPENW; Opens new window
  725. *
  726.  LEA    NewWindow(PC),A0
  727.  MOVE.L INTBAS(A4),A6
  728.  JSR    _LVOOpenWindow(A6)
  729.  MOVE.L D0,MYWIND(A4)
  730.  BEQ    ABORT
  731.  RTS
  732.  
  733. ***
  734. SET_WDHT; Window Limits
  735. *
  736.  MOVE.L MYWIND(A4),A1
  737.  MOVE.L 8(A1),WD(A4)
  738. * MOVE.W $A(A1),HT(A4)
  739.  RTS
  740.  
  741.  
  742. ***
  743. GET_MSG; Get system msg and ack it
  744. *
  745. ** BSR    SETTIM
  746.  MOVE.L MYWIND(A4),A0
  747.  MOVE.L $56(A0),A0      ;Mywindow->UserPort
  748.  MOVE.L 4,A6
  749.  JSR    _LVOGetMsg(A6)
  750.  MOVE.L D0,D7
  751.  BEQ.S  RTS2
  752.  MOVE.L D0,A1
  753.  MOVE.W $1A(A1),D5      ;NM_QUALIF
  754.  MOVE.L $14(A1),D6      ;NM_CLASS
  755.  MOVE.W $18(A1),D7      ;NM_CODE
  756.  JSR    _LVOReplyMsg(A6)
  757.  
  758.  BTST.L #9,D6           ;CloseWindow=$200
  759.  BNE    ENDALL
  760.  BTST.B #1,D6           ;NEWSIZE=2
  761.  BEQ.S  1$
  762.  BSR    SET_WDHT
  763. 1$
  764.  BTST.L #10,D6          ;RAWKEY=$400
  765.  BEQ.S  GET_MSG
  766.  
  767. *** Convert keycode D7 & QUALIF D5 to ASCII D0
  768.  MOVEQ  #-1,D0
  769.  CMP.W  #$4A,D7
  770.  BHI.S  RTS2
  771.  
  772.  LEA    KEYS(PC),A1
  773.  CMP.B  #$3A,D7         ;No shift change
  774.  BHI.S  2$
  775.  MOVEQ  #3,D1           ;R L Shift
  776.  AND.B  D5,D1
  777.  BEQ.S  2$
  778.  LEA    KEYS1(PC),A1
  779. 2$
  780.  MOVE.B 0(A1,D7.W),D0   ;Convert
  781.  CMP.B  #'a',D0
  782.  BCS.S  RTS2
  783.  CMP.B  #'z',D0
  784.  BHI.S  RTS2
  785.  
  786.  BTST.B #3,D5           ;ctrl
  787.  BEQ.S  3$
  788.  SUB.B  #96,D0
  789.  RTS
  790.  
  791. 3$
  792.  BTST.B #2,D5           ;CAPSLOCK
  793.  BEQ.S  RTS2
  794.  SUB.B  #32,D0
  795. RTS2
  796.  TST.B  D0
  797.  RTS
  798.  
  799.  
  800. ***
  801. FILENAME; get name
  802. *
  803.  MOVE.L A0,-(SP)
  804.  CLR.W  -(SP) i=0
  805. 1$
  806.  BSR    WAIT
  807.  BSR    GET_MSG
  808.  BLE    1$
  809.  CMP.B  #$D,D0
  810.  BEQ.S  4$
  811.  MOVE.B D0,D7
  812.  MOVEQ  #32,D0
  813.  MOVE.L 2(SP),A0
  814.  ADDA.W (SP),A0  i
  815.  CMP.B  D0,D7
  816.  BCS.S  3$
  817.  SUB.W  (SP),D0
  818.  BEQ    1$        ;> 32 char
  819.  ADDQ.W #1,(SP)
  820.  MOVE.B D7,(A0)+  ;put in name
  821.  CLR.B  (A0)
  822.  BSR.S  PCHR_W
  823.  BRA    1$
  824.  
  825. 3$
  826.  CMP.B  #8,D7
  827.  BNE    1$
  828.  TST.W  (SP)
  829.  BEQ    1$
  830.  CLR.B  -(A0)
  831.  SUBQ.W #1,(SP) i-=1
  832.  BSR.S  PCHR_W
  833.  BRA    1$
  834.  
  835. 4$
  836.  MOVE.W (SP)+,D0
  837.  MOVE.L (SP)+,A0
  838.  RTS
  839.  
  840.  
  841. ***
  842. DOMERR1; Print *** ERROR
  843. *
  844.  LEA    MERROR(PC),A0
  845.  BRA.S  PLIN_W
  846.  
  847. ***
  848. PLIN_S_W ;
  849. *
  850.  BSR    PLIN_S
  851.  
  852. ***
  853. PLIN_W; String of text to screen
  854. *
  855.  MOVEM.L D0/D7/A0/A1,-(SP)
  856.  MOVE.L A0,A1
  857.  MOVEQ  #-1,D0
  858. 1$
  859.  ADDQ.L #1,D0
  860.  CMP.B  (A1)+,D4
  861.  BLE    1$
  862.  MOVE.W D0,PLINW(A4)    ;Line cnt
  863.  BEQ.S  2$
  864.  BSR.S  PCHR_W
  865.  CLR.W  PLINW(A4)
  866. 2$
  867.  MOVE.B -(A1),D7
  868.  
  869. 3$
  870.  MOVE.B (A1)+,D7
  871.  BEQ.S  6$
  872.  BSR.S  PCHR_W
  873.  BRA    3$
  874.  
  875. 6$
  876.  MOVEM.L (SP)+,D0/D7/A0/A1
  877.  RTS
  878.  
  879.  
  880. ***
  881. PCHR_F_S_W; Char to File,Ser,Win
  882. *
  883.  BSR    PCHR_S
  884.  
  885. ***
  886. PCHR_F_W; Char to File,Win
  887. *
  888.  BSR    PCHR_F
  889.  
  890. ***
  891. PCHR_W; Char D7 to screen
  892. *
  893.  MOVEM.L D0-D6/A0-A6,-(SP)
  894.  MOVE.L D7,-(SP)
  895.  MOVE.L A0,-(SP)
  896.  MOVE.L GFXBAS(A4),A6
  897.  
  898.  MOVE.W CX(A4),D6       ;x=cx
  899.  MOVE.W CY(A4),D5       ;y=cy
  900.  MOVE.L MYWIND(A4),A3
  901.  MOVE.L $32(A3),A3      ;RPORT
  902.  
  903.  MOVEQ  #2,D0           ;Complement - Remove cursor
  904.  BSR    DRMDSET
  905.  BSR    PUTCUR
  906.  MOVEQ  #1,D0           ;JAM2
  907.  BSR    DRMDSET
  908.  MOVE.L (SP)+,A0
  909.  MOVE.W PLINW(A4),D0
  910.  BNE.S  PLINX
  911.  MOVE.B D7,D0
  912.  SUBQ.B #7,D0
  913.  BLT.S  CASEDEF
  914.  CMP.B  #7,D0
  915.  BGE.S  CASEDEF
  916.  ASL.L  #1,D0
  917.  JMP    JMPTAB(PC,D0)
  918.  
  919. JMPTAB
  920.  BRA.S  CASE7  7   BELL
  921.  BRA.S  CASE8  8   BS
  922.  BRA.S  CASE9  9   TAB
  923.  BRA.S  CASE10 10  LF
  924.  BRA.S  CASEDEF 11 CLS
  925.  BRA.S  CASEDEF 12 CR
  926.  BRA.S  CASE10 13  FF
  927.  
  928. CASE7 ;Bell ClipBlit(mywindow->RPort,0,0,mywindow->RPort,0,y-6,WD,HT,0x50)
  929.  MOVEM.L D5-D6,-(SP)
  930.  MOVE.L D5,D3      y
  931.  SUBQ.L #6,D3      y-6
  932.  MOVEQ  #$50,D6    $50
  933.  MOVEQ  #8,D5      HT
  934.  MOVE.W WD(A4),D4  WD
  935.  CLR.L  D2         0
  936.  MOVE.L A3,A1
  937.  CLR.L  D1         0
  938.  CLR.L  D0         0
  939.  MOVE.L A3,A0
  940.  JSR    _LVOClipBlit(A6)
  941.  MOVEM.L (SP)+,D5-D6
  942.  BRA.S  SCROLL
  943.  
  944. CASE8 ;Backspace
  945.  SUBQ.W #8,D6
  946.  CMP.W  #1,D6
  947.  BGE.S  SCROLL
  948.  MOVEQ  #0,D6
  949.  BRA.S  SCROLL
  950.  
  951. CASE9 ;Tab
  952.  ADD.W  #40,D6
  953.  BRA.S  CKEOL
  954.  
  955. CASEDEF
  956.  MOVEQ  #1,D0          ;Text(mywindow->RPort,&cc,1)
  957.  LEA.L  3(SP),A0       ;Point to byte c
  958. PLINX
  959.  MOVE.L D0,-(SP)
  960.  MULU   #8,D0
  961.  ADD.W  D0,D6
  962.  MOVE.L (SP)+,D0
  963.  MOVE.L A3,A1
  964.  JSR    _LVOText(A6)
  965.  
  966. CKEOL
  967.  CMP.W  WD(A4),D6
  968.  BLE.S  SCROLL
  969.  
  970. CASE10 ;LF
  971.  MOVEQ  #0,D6           ;CR
  972.  ADDQ.W #8,D5           ;LF
  973.  
  974. SCROLL
  975.  CMP.W  HT(A4),D5
  976.  BLE.S  MOVEXY          ;Not bottom yet
  977.  MOVEQ  #0,D6           ;CR
  978.  MOVEM.W WD(A4),D4/D5   ;ScrollRaster(mywindow->RPort,0,8,0,0,WD,HT)
  979.  CLR.L  D3
  980.  CLR.L  D2
  981.  MOVEQ  #8,D1
  982.  CLR.L  D0
  983.  MOVE.L A3,A1           ;RPORT
  984.  JSR    _LVOScrollRaster(A6)
  985.  SUBQ.W #2,D5           ;Up
  986.  
  987. MOVEXY ;Move cursor
  988.  MOVE.L D5,D1
  989.  MOVE.L D6,D0
  990.  MOVE.L A3,A1           ;RPORT
  991.  JSR    _LVOMove(A6)
  992.  
  993.  BSR.S  PUTCUR         ;Put cursor
  994.  
  995.  MOVE.W D6,CX(A4)       ;Save Cursor position
  996.  MOVE.W D5,CY(A4)
  997.  MOVE.L (SP)+,D7
  998.  MOVEM.L (SP)+,D0-D6/A0-A6
  999.  RTS
  1000.  
  1001.  
  1002. ***
  1003. DRMDSET; SetDrMd(mywindow->RPort,XX);
  1004. *
  1005.  MOVE.L A3,A1
  1006.  JMP    _LVOSetDrMd(A6)
  1007.  
  1008. PUTCUR
  1009.  MOVEQ  #3,D0
  1010.  BSR.S  PENSET
  1011. * RectFill(mywindow->RPort,x,y-6,x+6,y+1)
  1012.  MOVE.L D6,D2     x
  1013.  MOVE.L D5,D1     y
  1014.  SUBQ.L #6,D1     y-6
  1015.  ADDQ.L #6,D2     x+6
  1016.  MOVE.L D5,D3
  1017.  ADDQ.L #1,D3     y+1
  1018.  MOVE.L D6,D0     x
  1019.  MOVE.L A3,A1
  1020.  JSR    _LVORectFill(A6)
  1021.  MOVEQ  #1,D0
  1022.  
  1023. ***
  1024. PENSET; Set Pen type  SetAPen(mywindow->RPort,XX)
  1025. *
  1026.  MOVE.L A3,A1
  1027.  JMP    _LVOSetAPen(A6)
  1028.  
  1029.  
  1030. ***
  1031. WAIT; Wait for Ser rcv or Window msg
  1032. *
  1033.  MOVEM.L D0-D7/A0-A6,-(SP)
  1034.  MOVEQ  #0,D0
  1035.  MOVE.B T_SIG(A4),D1    ;Timer SigBit
  1036.  BSET   D1,D0
  1037.  
  1038.  MOVE.B R_SIG(A4),D1    ;SER receive SigBit
  1039.  BSET   D1,D0
  1040.  
  1041.  MOVE.B W_SIG(A4),D1    ;SER send SigBit
  1042.  BSET   D1,D0
  1043.  
  1044.  MOVE.L MYWIND(A4),A1
  1045.  MOVE.L $56(A1),A0      ;UserPort
  1046.  MOVE.B $F(A0),D1       ;MP_SigBit
  1047. * MOVE.B D1,C_SIG(A4)
  1048.  BSET   D1,D0
  1049.  MOVE.L 4,A6
  1050.  JSR    _LVOWait(A6)
  1051.  
  1052.  MOVE.B T_SIG(A4),D3
  1053.  BTST.L D3,D0
  1054.  BEQ.S  9$
  1055.  BSR    SETTIM
  1056. 9$
  1057.  MOVEM.L (SP)+,D0-D7/A0-A6
  1058.  BSR    CTSDEL
  1059.  BNE    WAIT
  1060.  BRA    SERSND
  1061.  
  1062.  
  1063. ***
  1064. GCHR_SER; Char from SER
  1065. *
  1066.  BSR.S  CK_SER
  1067.  MOVE.L D0,D7
  1068.  BEQ.S  1$              ;No Serial
  1069.  MOVE.L D0,A1
  1070.  JSR    _LVOWaitIO(A6)
  1071.  MOVE.B RS_IN(A4),D7    ;Get Serial char
  1072.  BSR.S  BeginIO_RR
  1073.  AND.B  #$7F,D7
  1074.  CMP.B  #$A,D7          ;Ignore LF's
  1075.  BEQ   GCHR_SER        ;GCHR_SER
  1076.  CMP.B  #$7F,D7
  1077.  BEQ    GCHR_SER
  1078.  CMP.B  #$D,D7
  1079.  BNE.S  1$
  1080.  CLR.B  CLOCK1(A4)      ;256 seconds timeout
  1081.  MOVEQ  #$A,D7          ;CR to LF
  1082. 1$
  1083.  RTS
  1084.  
  1085. ***
  1086. CK_SER
  1087. *
  1088.  MOVE.L R_R(A4),A1
  1089.  MOVE.L 4,A6
  1090.  JSR    _LVOCheckIO(A6)
  1091.  TST.L  D0
  1092.  RTS
  1093.  
  1094.  
  1095. ***
  1096. DO_RR_BEGIN; Start Serial device
  1097. *
  1098.  MOVE.L R_R(A4),A1
  1099.  MOVE.L D0,$3C(A1)      ;io_Baud
  1100.  MOVE.W #$B,$1C(A1)     ;IOSer.io_Command=SDCMD_SETPARAMS
  1101.  MOVE.L 4,A6
  1102.  JSR    _LVODoIO(A6)
  1103.  MOVE.L R_R(A4),A0
  1104.  MOVE.W #2,$1C(A0)      ;IOSer.io_Command=CMD_READ
  1105.  
  1106. ***
  1107. BeginIO_RR; BeginIO(Read_Request)
  1108. *
  1109.  MOVE.L R_R(A4),A1
  1110.  MOVE.L $14(A1),A6      ;IO_Device/Device_Node
  1111.  JMP    DEV_BEGINIO(A6)
  1112.  
  1113. ***
  1114. OPEN_TIM; Open TIM Device
  1115. *
  1116.  LEA    TIMNAM(PC),A0
  1117.  MOVEQ  #1,D0           ;UNIT_VBLANK
  1118.  BRA.S  OPEN_DEV
  1119.  
  1120. ***
  1121. OPEN_SERIAL; Open SER device
  1122. *
  1123.  LEA    SERNAM(PC),A0
  1124.  CLR.L  D0
  1125. OPEN_DEV
  1126.  CLR.L  D1              ;FLAGS
  1127. * A1=ReadRequest
  1128.  MOVE.L 4,A6
  1129.  JSR    _LVOOpenDevice(A6)
  1130.  TST.L  D0
  1131.  BNE    EXIT1
  1132.  RTS
  1133.  
  1134.  
  1135. ***
  1136. DO_ALLOC; Allocate mem for msg ports
  1137. *
  1138.  MOVEQ  #$52,D0         ;Size IOExtSer
  1139. ALLOC1
  1140.  MOVE.L #$10001,D1      ;MEMF_PUBLIC|MEMF_CLEAR
  1141.  MOVE.L 4,A6
  1142.  JSR    _LVOAllocMem(A6)
  1143.  TST.L  D0
  1144.  BEQ    MEMFAIL
  1145.  RTS
  1146.  
  1147.  
  1148. ***
  1149. PLIN_F_S_W ;
  1150. *
  1151.  BSR    PLIN_S
  1152. ***
  1153. PLIN_F_W; Line of text to screen & file
  1154. *
  1155.  BSR    PLIN_W
  1156. ***
  1157. PLIN_F; String of text to Capture
  1158. *
  1159.  MOVEM.L A0/D7,-(SP)
  1160. 1$
  1161.  MOVE.B (A0)+,D7
  1162.  BEQ.S  2$
  1163.  BSR.S  PCHR_F
  1164.  BRA.S  1$
  1165.  
  1166. 2$
  1167.  MOVEM.L (SP)+,A0/D7
  1168.  RTS
  1169.  
  1170.  
  1171. ***
  1172. PCHR_F; put Captured byte in File
  1173. *
  1174.  TST.L  FHCAPT(A4)
  1175.  BEQ.S  2$
  1176.  CMP.L  #1800000,CHRCNT(A4)
  1177.  BEQ.S  2$
  1178.  MOVEM.L D0-D7/A0-A6,-(SP)
  1179.  CMP.B  D4,D7
  1180.  BGE.S  0$
  1181.  CMP.B  #9,D7
  1182.  BEQ.S  0$
  1183.  CMP.B  #$A,D7
  1184.  BEQ.S  00$
  1185.  CMP.B  #$D,D7
  1186.  BNE.S  1$
  1187. 00$
  1188.  MOVE.B #$A,D7
  1189.  ADDQ.L #1,LINCNT(A4)
  1190. 0$
  1191.  BSR.S  4$
  1192. 1$
  1193.  MOVEM.L (SP)+,D0-D7/A0-A6
  1194. 2$ RTS
  1195.  
  1196. 4$
  1197.  ADDQ.L #1,CHRCNT(A4)
  1198.  LEA    BUFCAP(A4),A0
  1199.  MOVE.W CAPCNT(A4),D0
  1200.  MOVE.B D7,0(A0,D0.W)
  1201.  ADDQ.W #1,D0
  1202.  MOVE.W D0,CAPCNT(A4)
  1203.  CMP.W  #CAPSIZ,D0
  1204.  BNE.S  2$
  1205.  
  1206. ***
  1207. CAP_FLUSH; write buffer to disk
  1208. *
  1209.  MOVE.L FHCAPT(A4),D1
  1210.  BEQ.S  RTS3
  1211.  LEA    BUFCAP(A4),A0
  1212.  MOVE.L A0,D2
  1213.  CLR.L  D3
  1214.  MOVE.W CAPCNT(A4),D3
  1215.  MOVE.L (A4),A6
  1216.  JSR    _LVOWrite(A6)
  1217.  CLR.W  CAPCNT(A4)
  1218.  TST.L  D0
  1219.  BMI.S  CLSCA1
  1220. RTS3 RTS
  1221.  
  1222. ***
  1223. CLSCAP; Close Capture file
  1224. *
  1225.  BSR    CAP_FLUSH
  1226. CLSCA1
  1227.  MOVE.L FHCAPT(A4),D1
  1228.  BEQ    RTS3
  1229.  CLR.L  FHCAPT(A4)
  1230.  MOVE.L (A4),A6
  1231.  JMP    _LVOClose(A6)
  1232.  
  1233.  
  1234. ***
  1235. OPNCAP; Open a Capture file
  1236. *
  1237.  MOVE.L #1006,D2        ;MODE_NEWFILE
  1238.  MOVE.L A0,D1           ;CNAME(A4)
  1239.  MOVE.L (A4),A6
  1240.  JSR    _LVOOpen(A6)
  1241.  MOVE.L D0,FHCAPT(A4)
  1242.  BEQ.S  1$
  1243.  CLR.L  CHRCNT(A4)
  1244.  CLR.L  LINCNT(A4)
  1245. 1$
  1246.  TST.L  D0
  1247.  RTS
  1248.  
  1249.  
  1250. ***
  1251. SEND_BUF_FILL; Fill transmit buffer
  1252. *
  1253.  MOVE.L FHSEND(A4),D1
  1254.  LEA    BUFSEN(A4),A0
  1255.  MOVE.L A0,SENPNT(A4)
  1256.  MOVE.L A0,D2
  1257.  MOVEQ  #0,D3
  1258.  MOVE.W #SENSIZ,D3
  1259.  MOVE.L (A4),A6
  1260.  JSR    _LVORead(A6)
  1261.  MOVE.W D0,SENCNT(A4)
  1262.  BMI    CLSSND1
  1263.  BEQ    CLSSND
  1264.  
  1265. ***
  1266. GCHR_FIL; get char from read file
  1267. *
  1268.  SUBQ.W #1,SENCNT(A4)
  1269.  BMI.S  SEND_BUF_FILL
  1270.  MOVE.L SENPNT(A4),A0
  1271.  MOVE.B (A0)+,D7
  1272.  MOVE.L A0,SENPNT(A4)
  1273.  BRA    PCHR_S
  1274.  
  1275.  
  1276. ***
  1277. PLIN_S; Line to SER
  1278. *
  1279.  MOVEM.L D7/A0,-(SP)
  1280. 1$
  1281.  MOVE.B (A0)+,D7
  1282.  BEQ.S  2$
  1283.  BSR.S  PCHR_S
  1284.  BRA    1$
  1285. 2$
  1286.  MOVEM.L (SP)+,D7/A0
  1287.  RTS
  1288.  
  1289. ***
  1290. CTSDEL
  1291. *
  1292.  BSR.S  CTSTST
  1293.  BEQ.S  RTS80
  1294. ***
  1295. DELAY4; 4 second delay
  1296. *
  1297.  MOVEM.L A0-A3/D0-D3,-(SP)
  1298.  MOVEQ  #100,D1          ;2 second delay
  1299.  ADD.L  D1,D1
  1300.  MOVE.L (A4),A6
  1301.  JSR    _LVODelay(A6)
  1302.  MOVEM.L (SP)+,A0-A3/D0-D3
  1303. CTSTST
  1304.  BTST.B #4,$BFD000
  1305. RTS80
  1306.  RTS
  1307.  
  1308.  
  1309. FSPUTW BSR WAIT
  1310. ***
  1311. PCHR_S ;
  1312. *
  1313.  CMP.B  #-1,FSNEXT(A4)
  1314.  BEQ.S  FSPUTW
  1315.  TST.B  FSFULL(A4)
  1316.  BNE    FSPUTW
  1317.  BSR    CTSDEL
  1318.  BNE    FSPUTW
  1319.  MOVEM.L D0/D7/A0,-(SP)
  1320.  LEA    FSBEGN(A4),A0
  1321.  CLR.L  D0
  1322.  MOVE.B FSNEXT(A4),D0
  1323.  ADDA.W D0,A0
  1324.  MOVE.B D7,(A0)+
  1325.  CLR.B  (A0)
  1326.  ADDQ.B #1,FSNEXT(A4)
  1327.  CMP.B  #256-81,D0
  1328.  BCS.S  5$
  1329.  CMP.B  #$A,D7
  1330.  BNE.S  5$
  1331.  ADDQ.B #1,FSFULL(A4)
  1332.  BSR    WAIT
  1333. 5$
  1334.  MOVEM.L (SP)+,D0/D7/A0
  1335.  CMP.B  #$D,D7
  1336.  BEQ.S  SERSN1
  1337.  RTS
  1338.  
  1339. ***
  1340. SERSND ;
  1341. *
  1342.  TST.B  CLOCK1(A4)
  1343.  BEQ.S  SERSNR
  1344. SERSN1
  1345.  MOVEM.L D0-D2/D7/A0-A2,-(SP)
  1346.  LEA    FSBEGN(A4),A0
  1347. 1$
  1348.  MOVE.B (A0)+,D7
  1349.  BEQ.S  8$
  1350.  CMP.B  #$A,D7
  1351.  BNE.S  5$
  1352.  TST.B  (A0)
  1353.  BEQ.S  2$
  1354.  MOVEQ  #$16,D7
  1355.  BSR.S  PCHRS
  1356. 2$
  1357.  CLR.B  CLOCK1(A4)
  1358.  MOVEQ  #$D,D7
  1359. 5$
  1360.  BSR.S  PCHRS
  1361.  BRA    1$
  1362. 8$
  1363.  MOVEM.L (SP)+,D0-D2/D7/A0-A2
  1364.  CLR.B  FSNEXT(A4)
  1365.  CLR.B  FSBEGN(A4)
  1366.  CLR.B  FSFULL(A4)
  1367. SERSNR
  1368.  RTS
  1369.  
  1370.  
  1371. ***
  1372. PCHRS; Serial output
  1373. *
  1374.  MOVE.L A0,-(SP)
  1375. 1$
  1376.  BSR    CTSDEL
  1377.  BEQ.S  5$
  1378.  BSR    SETTIM
  1379.  BRA    1$
  1380. 5$
  1381.  MOVE.L W_R(A4),A1
  1382.  MOVE.B D7,RS_OUT(A4)
  1383.  MOVE.L 4,A6
  1384.  JSR    _LVODoIO(A6)
  1385.  MOVE.L (SP)+,A0
  1386. R_22 RTS
  1387.  
  1388.  
  1389. CLSSND1
  1390.  BSR    DOMERR1
  1391. ***
  1392. CLSSND ;Close read file
  1393. *
  1394.  MOVE.L FHSEND(A4),D1
  1395.  BEQ.S  R_22
  1396.  MOVE.L (A4),A6
  1397.  JSR    _LVOClose(A6)
  1398. 2$
  1399.  BSR    WAIT
  1400.  TST.B  FSNEXT(A4)
  1401.  BNE    2$
  1402.  CLR.L  FHSEND(A4)
  1403.  LEA    MDONE(PC),A0
  1404.  BRA    PLIN_W
  1405.  
  1406.  
  1407. ***
  1408. DELETEPORT; DeletePort(Read_Request->IOSer.io_Message.mn_ReplyPort)
  1409. *
  1410.  MOVE.L A0,A3
  1411.  MOVE.L $E(A0),A2
  1412.  MOVE.L A2,A1
  1413.  MOVE.L 4,A6
  1414.  JSR    _LVORemPort(A6)
  1415.  MOVEQ  #-1,D2
  1416.  MOVE.B D2,8(A2)
  1417.  MOVE.L D2,$14(A2)
  1418.  MOVEQ  #0,D0
  1419.  MOVE.B $F(A2),D0
  1420.  JSR    _LVOFreeSignal(A6)
  1421.  MOVEQ  #$22,D0
  1422.  MOVE.L A2,A1
  1423.  BSR.S  1$
  1424.  MOVEQ  #$52,D0         ;Size of request
  1425.  MOVE.L A3,A1
  1426. 1$
  1427.  JMP    _LVOFreeMem(A6)
  1428.  
  1429.  
  1430. ***
  1431. DOCREATE; Create a msg port
  1432. *
  1433.  MOVE.L A0,D4
  1434.  MOVE.L A2,-(SP)
  1435.  MOVEQ  #-1,D0
  1436.  MOVE.L 4,A6
  1437.  JSR    _LVOAllocSignal(A6)
  1438.  MOVE.B D0,D5
  1439.  MOVEQ  #$22,D0
  1440.  BSR    ALLOC1
  1441.  MOVE.L D0,A2
  1442.  MOVE.L D4,$A(A2)
  1443.  CLR.B  9(A2)
  1444.  MOVE.B #4,8(A2)
  1445.  CLR.B  $E(A2)
  1446.  MOVE.B D5,$F(A2)
  1447.  SUBA.L A1,A1
  1448.  JSR    _LVOFindTask(A6)
  1449.  MOVE.L D0,$10(A2)
  1450.  MOVE.L A2,A1
  1451.  JSR    _LVOAddPort(A6)
  1452.  MOVE.L A2,D0
  1453.  MOVE.L (SP)+,A2
  1454.  RTS
  1455.  
  1456.  
  1457. ***
  1458. CKBBS;
  1459. *
  1460.  MOVEQ  #17,D3           ;was 7
  1461.  LEA    RBUFF(A4),A1
  1462.  MOVE.L A1,A0
  1463.  TST.B  NRNXT(A4)
  1464.  BEQ.S  CKNR            ;Not KA-NODE,SID next
  1465.  MOVE.W (A1)+,D0
  1466.  CMP.B  #'[',(A0)
  1467.  BEQ    CMD_BBS         ;for Bidflg
  1468.  CMP.B  #'?',(A0)
  1469.  BEQ.S  5$
  1470.  CMP.B  #'>',(A0)
  1471.  BNE.S  CKNR
  1472. 5$
  1473.  CMP.B  (A1)+,D4
  1474.  BNE.S  RTS45
  1475.  CMP.B  #'C',D0
  1476.  BEQ    CONCPY
  1477.  CMP.B  #'X',D0
  1478.  BEQ    CONCPY
  1479. RTS45 RTS
  1480.  
  1481. CKNR
  1482.  MOVE.L A0,A1
  1483. 8$
  1484.  MOVE.B (A1)+,D0
  1485.  CMP.B  #'#',D0
  1486.  BLT    RTS45
  1487.  CMP.B  #'>',D0
  1488.  BEQ.S  NRCON
  1489.  CMP.B  #'}',D0
  1490.  BEQ.S  NRCON
  1491.  CMP.B  #'*',D0
  1492.  DBEQ   D3,8$
  1493.  BNE.S  RTS9            ;NG
  1494.  CMP.B  (A1)+,D0
  1495.  BNE.S  RTS9
  1496.  CMP.B  (A1)+,D0
  1497.  BNE.S  RTS9
  1498.  CMP.B  (A1)+,D4
  1499.  BNE.S  RTS9
  1500.  CLR.B  NRNXT(A4)
  1501.  
  1502.  LEA    MCONCT(PC),A0   ;*** CONNECTED to XXXXXX
  1503.  BSR.S  CMPCON
  1504.  BNE.S  RTS9
  1505.  TST.B  -(A1)
  1506.  ADDQ.B #1,NRNXT(A4)    ;NETROM next?
  1507.  CLR.B  SIDBID(A4)
  1508.  CMP.B  #$A,-(A1)
  1509.  BNE.S  RTS9
  1510.  SUBQ.B #7,-(A1)
  1511.  BNE.S  RTS9
  1512.  SUBQ.B #7,-(A1)
  1513.  BNE.S  RTS9
  1514.  SUBQ.B #7,-(A1)
  1515.  BNE.S  RTS9
  1516. * CLR.B  RBUFF(A4)
  1517.  ADDQ.B #1,C_HIST(A4)   :Con history
  1518.  ADDQ.B #1,C_RUN(A4)    ;Con current
  1519. * CLR.W  SCHARS(A4)      ;Max 65k per connect
  1520.  MOVE.B B_ENAB(A4),D3
  1521.  BEQ.S  RTS9            ;BBS disabled
  1522.  BSR    MYBBS
  1523.  BRA    HELP_KEY
  1524.  
  1525. NRCON
  1526.  LEA    MNRCON(PC),A0   ;} Connected to XXXXXX
  1527.  TST.B  NRNXT(A4)
  1528.  BEQ.S  RTS9
  1529. CMPCON
  1530.  MOVEQ  #18,D3
  1531. 1$
  1532.  CMPM.B (A0)+,(A1)+
  1533.  DBNE   D3,1$
  1534.  TST.B  -(A0)
  1535.  BNE.S  RTS9
  1536.  TST.B  -(A1)
  1537. CONCPY
  1538.  MOVEQ  #78,D3
  1539.  LEA    CONSTR(A4),A0
  1540. 33$
  1541.  MOVE.B (A1)+,(A0)+
  1542.  DBEQ   D3,33$
  1543.  CLR.B  (A0)
  1544. RTS9
  1545.  RTS
  1546.  
  1547.  
  1548. DUMPER; 
  1549.  BSR    PLIN_S
  1550. 1$
  1551.  BSR    CKIO
  1552.  CMP.B  #'$',D7
  1553.  BNE    1$              ;Clr rec buffer
  1554. DUMP2
  1555. 3$
  1556.  BSR    CKIO
  1557.  CMP.B  #':',D7
  1558.  BNE    3$
  1559.  RTS
  1560.  
  1561. * SECTION data
  1562. *NewWindow Structure
  1563. * 0,0,WD,HT,0,1,
  1564. * RAWKEY|CLOSEWINDOW|NEWSIZE,
  1565. * ACTIVATE|BORDERLESS|SMART_REFRESH|SIZEBRIGHT|
  1566. * WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|WINDOWSIZING,
  1567. * NULL, NULL, (title), NULL, NULL,
  1568. * 100,35,WD,HT, WBENCHSCREEN
  1569.  
  1570. NewWindow
  1571.  DC.W 0,0,20,20,1
  1572.  DC.L $602,$181F,0,0
  1573.  DC.L MTITLE,0,0
  1574.  DC.W 5,5,-1,-1,1
  1575.  
  1576. MTITLE DC.B 'P1103 F1=CAPT F2=SEND F3=BAUD F5=MON F6=CLI F7=FWD F9=BBS F10=QUIT',0
  1577.  
  1578. DOSNAM DC.B 'dos.library',0
  1579. INTNAM DC.B 'intuition.library',0
  1580. GRANAM DC.B 'graphics.library',0
  1581. SERNAM DC.B 'serial.device',0
  1582. TIMNAM DC.B 'timer.device',0,0
  1583.  
  1584. MCONCT DC.B 'CONNECTED to ',0
  1585. MNRCON DC.B ' Connected to ',0
  1586. MT_RS  DC.B 'TR'
  1587. MR_RS  DC.B 'PR'
  1588. MW_RS  DC.B 'PW',0
  1589. NEWCLI DC.B 'NEWCLI',0
  1590.  
  1591. MSEND  DC.B 10,'Send:',0
  1592. MCAPT  DC.B 10,'Capture:',0
  1593. MERROR DC.B 10,'*** Error',10,0
  1594. MOPEN  DC.B 'OPEN',0
  1595. MCLOSD DC.B 'CLOSED',0
  1596. BRATEV DC.W 300,1200,2400,9600
  1597.  
  1598. KEYS DC.B '`1234567890-=\',0
  1599.  DC.B '0qwertyuiop[]',0,'123'
  1600.  DC.B 'asdfghjkl;''',0,0,'456'
  1601.  DC.B  0,'zxcvbnm,./'
  1602.  DC.B  0,'.789 ',8,9,$D,$D,27,127,0,0,0,'-'
  1603.  
  1604. KEYS1 DC.B '~!@#$%^&*()_+|',0
  1605.  DC.B '0QWERTYUIOP{}',0,'123'
  1606.  DC.B 'ASDFGHJKL:"',0,0,'456'
  1607.  DC.B  0,'ZXCVBNM<>?'
  1608.  
  1609.  CNOP 0,4
  1610. *R102.ASM 870322
  1611. MYFWD
  1612.  ADDQ.B #1,F7_RUN(A4)
  1613.  BSR.S  MYBBS1
  1614.  BRA    HELP_KEY
  1615.  
  1616. MYBBS
  1617.  CLR.B  SIDBID(A4)
  1618. MYBBS1
  1619.  MOVE.L SP,STACKB(A4)
  1620.  MOVE.L (A4),A6
  1621.  CLR.B  BIDCHG(A4)
  1622.  CLR.L  BIDADR(A4)
  1623.  CLR.B  PORT(A4)
  1624.  CLR.B  BADCNT(A4)
  1625.  CLR.L  NXTLST(A4)
  1626.  CLR.B  B_HLT(A4)
  1627.  ADDQ.B #1,B_RUN(A4)
  1628.  ADDQ.B #1,C_RUN(A4)    ;Con current
  1629.  LEA    TNCINI(PC),A0
  1630.  BSR    DUMPER
  1631.  BSR    WAIT
  1632.  BSR    CKSTAT
  1633.  CLR.B  DSCFLG(A4)
  1634.  MOVE.B STATUS(A4),D0
  1635.  CMP.B  #'C',D0         ;Streamswitch OK?
  1636.  BEQ.S  2$
  1637.  CMP.B  #'R',D0         ;Reject frame sent
  1638.  BEQ.S  2$
  1639.  LEA    TNCSWI(PC),A0   ;Try other stream
  1640.  BSR    DUMPER
  1641.  ADDQ.B #1,PORT(A4)
  1642. 2$
  1643.  BSR    DOBBS
  1644. ABORTB; BBS abort
  1645.  CLR.B  C_RUN(A4)
  1646.  CLR.B  FR_RUN(A4)
  1647.  CLR.B  F7_RUN(A4)
  1648.  CLR.B  BADCNT(A4)
  1649.  LEA    DIR_R_FIB(A4),A5
  1650.  BSR    A5_FREE_MEM
  1651.  LEA    USR_R_FIB(A4),A5
  1652.  BSR    A5_FREE_MEM
  1653.  LEA    MSG_R_FIB(A4),A5
  1654.  BSR    A5_FREE_MEM
  1655.  LEA    FWD_R_FIB(A4),A5
  1656.  BSR    A5_FREE_MEM
  1657.  LEA    BID_R_FIB(A4),A5
  1658.  BSR    A5_FREE_MEM
  1659.  LEA    MSG_W_FIB(A4),A5
  1660.  BSR    A5_CLOSE
  1661.  
  1662.  LEA    U_LINE(A4),A0
  1663.  BSR    PLIN_F_W
  1664.  CLR.B  B_RUN(A4)
  1665.  LEA    TNCEND(PC),A0
  1666.  BSR    PLIN_S
  1667.  BSR    DELAY4
  1668.  LEA    TNCDIS(PC),A0
  1669.  BSR    PLIN_S
  1670.  MOVE.L STACKB(A4),SP
  1671.  CLR.L  D0
  1672.  RTS
  1673.  
  1674.  
  1675. ***
  1676. GETLIN; Get line of txt from serial
  1677. *       ;Strip binary. Terminate NULL, set ZFLG
  1678.  CLR.B  ZFLG(A4)
  1679.  CLR.B  ARROW(A4)
  1680.  LEA    RBUFF(A4),A0     ;buffer address
  1681.  MOVE.L A0,-(SP)
  1682. GMAX
  1683.  MOVEM.L A0/D7,-(SP)
  1684. 1$
  1685.  BSR    CKIO
  1686.  CMP.B  #$1A,D7
  1687.  BNE.S  3$
  1688.  MOVE.B D7,ZFLG(A4)
  1689.  CLR.L  D7
  1690. 3$
  1691.  MOVE.B D7,D1
  1692.  BEQ    1$
  1693.  CMP.B  D4,D1
  1694.  BGE.S  9$
  1695.  CMP.B  #$A,D1
  1696.  BEQ.S  9$
  1697.  CMP.B  #9,D1
  1698.  BNE    1$
  1699. 9$
  1700.  MOVEM.L (SP)+,A0/D7
  1701.  
  1702.  MOVE.B D1,(A0)+
  1703.  CMP.B  #$A,D1
  1704.  BNE    GMAX
  1705.  MOVE.L (SP),A0
  1706. 14$
  1707.  MOVE.L A0,A1
  1708. 15$
  1709.  CMP.B  (A0)+,D4
  1710.  BEQ    15$
  1711.  CMP.B  #9,-1(A0)
  1712.  BEQ.S  15$
  1713.  CMP.B  #$A,-1(A0)
  1714.  BNE    14$
  1715.  CMP.B  #'>',-2(A0)
  1716.  BNE.S  16$
  1717.  ADDQ.B #1,ARROW(A4)
  1718. 16$
  1719.  MOVE.L A1,A0
  1720.  MOVE.B #$A,(A0)+
  1721.  CLR.B  (A0)
  1722.  
  1723.  MOVE.L A0,D3
  1724.  SUB.L  (SP),D3
  1725.  
  1726.  MOVE.L (SP),A0
  1727.  BSR    PLIN_F_W
  1728.  MOVE.L (SP)+,A0
  1729.  CLR.B  GLINER(A4)
  1730.  CMP.L  #'cmd:',(A0)
  1731.  BEQ.S  17$
  1732.  CMP.L  #'*** ',(A0)
  1733.  BNE.S  18$
  1734.  CMP.L  #'conn',4(A0)
  1735.  BEQ    GETLIN          ;Connect Request
  1736.  CMP.L  #'DISC',4(A0)
  1737.  BNE.S  18$
  1738. 17$
  1739.  ADDQ.B #1,GLINER(A4)
  1740. 18$
  1741.  CLR.B  CLOCK1(A4)
  1742.  TST.B  DSCFLG(A4)
  1743.  BNE.S  19$
  1744.  TST.B  GLINER(A4)
  1745. 19$
  1746.  RTS
  1747.  
  1748.  
  1749. ***
  1750. PSTR; Print BIN terminated string A0+
  1751. *
  1752.  BSR    CK_SER
  1753.  BEQ.S  1$
  1754.  BSR    CKSTAT
  1755.  BMI    CMD_B  *ABORTB
  1756. 1$
  1757.  MOVEQ  #0,D0                ??? was #-1
  1758.  MOVE.L D7,-(SP)
  1759. PS1
  1760.  ADDQ.L #1,D0
  1761.  MOVE.B (A0),D7
  1762.  BEQ.S  PS2
  1763.  BSR    PCHR_S
  1764.  CMP.B  #$A,(A0)+
  1765.  BNE.S  PS1
  1766. PS2
  1767.  MOVE.L (SP)+,D7
  1768.  RTS
  1769.  
  1770.  
  1771. ***
  1772. DOBBS; BBS run
  1773. *
  1774.  BSR    TIME            ;Update RTC
  1775.  BSR.S  FND_CALL
  1776.  BEQ    ABORTB
  1777.  BSR    GET_USR_DATA
  1778.  BEQ    ABORTB
  1779.  CLR.B  DIRCHG(A4)       ;Clr DIR change flag
  1780.  LEA    U_LINE(A4),A0
  1781.  BSR    PLIN_F_W
  1782.  BSR    DIRRED
  1783.  BSR    WELCOME
  1784.  
  1785. * BSR    BIDRED
  1786.  
  1787. DOBB1
  1788.  LEA    DIR_R_FIB(A4),A5
  1789.  MOVE.L 12(A5),A6      ;Buff ADR
  1790.  MOVE.L (A6),D0        ;Last Msg
  1791.  BSR    INC_ABCD
  1792.  MOVE.L D0,NXTMSG(A4)
  1793.  
  1794.  BSR    DO_USR_CMD
  1795.  MOVE.B DSCFLG(A4),D0
  1796.  BEQ    DOBB1
  1797.  BRA    ABORTB
  1798.  
  1799.  
  1800. ***
  1801. FND_CALL; Find Call in connect msg
  1802. *
  1803.  LEA    USR_NEW(PC),A0    ;NO-NAME fake out
  1804.  LEA    U_LINE(A4),A1
  1805.  MOVEQ  #50,D3
  1806. 1$
  1807.  MOVE.B (A0)+,(A1)+
  1808.  DBEQ   D3,1$
  1809.  LEA    U_CALL(A4),A1
  1810.  LEA    CONSTR(A4),A0
  1811.  
  1812. ***
  1813. MOVE_VALID_CALL; Move CALL A0 to A1 and ck valid
  1814. *
  1815.  MOVE.L A1,-(SP)
  1816.  MOVEQ  #6,D3
  1817. 3$
  1818.  MOVE.B (A0)+,(A1)
  1819.  CMP.B  #'0',(A1)+
  1820.  DBLT   D3,3$        ;OK so far
  1821.  MOVEQ  #3,D3
  1822.  MOVE.B D4,-(A1)
  1823.  MOVE.L (SP)+,A1     ;Moved, now check valid
  1824.  MOVE.B (A1)+,D0
  1825.  CMP.B  #'A',D0
  1826.  BLT.S  6$
  1827.  CMP.B  #'Z',D0
  1828.  BGT.S  6$
  1829.  CMP.B  #'9',(A1)+
  1830.  BGT.S  7$
  1831.  CMP.B  #'A',(A1)+
  1832.  BGE.S  9$
  1833. 6$
  1834.  BRA    BRTS
  1835.  
  1836. 7$
  1837.  CMP.B  #'9',(A1)+
  1838.  BGT    6$
  1839. 9$
  1840.  CMP.B  #'A',(A1)+
  1841.  BLT    6$
  1842.  SUBQ   #1,D3
  1843.  BMI    6$
  1844.  CMP.B  (A1),D4
  1845.  BNE    9$
  1846.  BRA    GRTS
  1847.  
  1848.  
  1849. ***
  1850. WELCOME; Welcome user
  1851. *
  1852.  CLR.B  DSCFLG(A4)
  1853.  LEA    MAMIG1(PC),A0
  1854.  BSR    PLIN_F_S_W
  1855.  BSR    SETRTC         ;date for USR file
  1856.  TST.B  F7_RUN(A4)
  1857.  BNE.S  FARROW
  1858.  CMP.B  U_BID(A4),D4
  1859.  BNE    GRTS
  1860.  LEA    U_NAME(A4),A0
  1861.  BSR    PLIN_F_S_W
  1862.  LEA    MWELCM(PC),A0
  1863.  BSR    PLIN_F_S_W
  1864.  MOVEQ  #4,D7           ;TO LM or L>
  1865.  BSR    FILL_CMPLIN
  1866.  LEA    DIR_R_FIB(A4),A5
  1867.  MOVE.L 12(A5),(A5)     ;Mid Pointer
  1868.  MOVE.L 16(A5),20(A5)   ;Byte cntr
  1869. 7$
  1870.  BSR    LISTER
  1871.  BNE    7$
  1872.  RTS
  1873.  
  1874.  
  1875. ***
  1876. FARROW; Input until >
  1877. *
  1878.  BSR    GETLIN
  1879.  BNE    CMD_B
  1880.  TST.B  ARROW(A4)
  1881.  BEQ    FARROW
  1882.  RTS
  1883.  
  1884.  
  1885. ***
  1886. DO_USR_CMD; Get and do User command
  1887. *
  1888.  MOVE.B #35,STACNT(A4)
  1889.  TST.B  DSCFLG(A4)
  1890.  BNE    CMD_B
  1891.  MOVE.B #-1,LHFLG(A4)
  1892.  TST.B  F7_RUN(A4)    ;Only once
  1893.  BNE    CMD_F         ;Forward out loop
  1894.  LEA    MFWD(PC),A0   ;F>
  1895.  TST.B  FR_RUN(A4)
  1896.  BNE.S  1$
  1897.  BSR    SETRTC        ;Set Prompt with time
  1898. * LEA    MPROMT(PC),A0
  1899. 1$
  1900.  BSR    PLIN_F_S_W
  1901.  BSR    GETLIN
  1902.  BNE    CMD_B
  1903.  
  1904.  CMP.W  #'F>',(A0)
  1905.  BEQ    CMD_F
  1906.  CMP.B  #'[',(A0)     ;[BBSID]
  1907.  BEQ    CMD_BBS
  1908.  
  1909.  TST.B  ZFLG(A4)
  1910.  BNE    BRTS
  1911.  BSR    REM_SPC
  1912.  MOVE.B (A0)+,D0
  1913.  CMP.B  #'D',D0
  1914.  BEQ    CMD_D
  1915.  CMP.B  #'J',D0
  1916.  BEQ    CMD_J
  1917.  CMP.B  #'K',D0
  1918.  BEQ    CMD_K
  1919.  CMP.B  #'L',D0
  1920.  BEQ    CMD_L
  1921.  CMP.B  #'N',D0
  1922.  BEQ    CMD_NAME
  1923.  CMP.B  #'R',D0
  1924. 7$
  1925.  BEQ    CMD_R
  1926.  CMP.B  #'S',D0
  1927.  BEQ    CMD_S
  1928.  CMP.B  #'T',D0
  1929.  BEQ    CMD_T
  1930.  CMP.B  #'V',D0
  1931.  BEQ    7$
  1932.  TST.B  FR_RUN(A4)
  1933.  BNE.S  CMD_B         ;Forwarding error
  1934.  CMP.B  #'B',D0
  1935.  BNE    CMD_HUH
  1936.  
  1937.  
  1938. ***
  1939. CMD_B; Disc user
  1940. *
  1941.  MOVE.L NXTLST(A4),D0
  1942.  BEQ.S  3$
  1943.  MOVE.L D0,U_MSG(A4)    ;Set last read
  1944. 3$
  1945. * ADDQ.B #1,DSCFLG(A4)
  1946.  LEA    TIMLIN(A4),A0
  1947.  LEA    U_YEAR(A4),A1
  1948.  MOVE.L (A0)+,(A1)+
  1949.  MOVE.L (A0)+,(A1)+
  1950.  MOVE.W (A0)+,(A1)+
  1951.  BSR    CLEAN_USR
  1952.  BSR    CLEAN_DIR_2     ;Write DIR changes to disk
  1953.  ADDQ.B #1,DSCFLG(A4)
  1954.  BRA    ABORTB
  1955.  
  1956.  
  1957. ***
  1958. CMD_BBS; SID flags
  1959. *
  1960. 1$
  1961.  MOVE.B (A0)+,D7
  1962.  BEQ.S  5$
  1963.  CMP.B  #'$',D7
  1964.  BNE    1$
  1965.  MOVE.B D7,SIDBID(A4)
  1966. 5$
  1967.  RTS
  1968.  
  1969.  
  1970. ***
  1971. CMD_D; D CMD
  1972. *
  1973.  CMP.B  (A0)+,D4
  1974.  BNE    BRTS
  1975.  LEA    BBS_MSG+2(A4),A1
  1976.  MOVE.L A1,LASTPT(A4)   ;Fakeout
  1977.  CLR.L  D7
  1978.  MOVEQ  #30,D3
  1979. CDL1
  1980.  MOVE.B (A0)+,(A1)+
  1981.  CMP.B  (A0),D4
  1982.  DBGE   D3,CDL1
  1983.  CLR.B  (A1)
  1984.  BRA    CM8A
  1985.  
  1986.  
  1987. ***
  1988. CMD_J
  1989. *
  1990.  CMP.B  #$A,(A0)
  1991.  BNE.S  CJ_BAD
  1992.  LEA    TNCMH(PC),A0
  1993.  BSR    PLIN_S
  1994.  BSR    DUMP2
  1995.  
  1996.  LEA    TBUFF(A4),A0
  1997.  MOVE.W #639,D3
  1998. 2$
  1999.  MOVEM.L D3/A0,-(SP)
  2000.  BSR    CKIO
  2001.  MOVEM.L (SP)+,D3/A0
  2002.  CMP.B  #$A,D7
  2003.  BLT    2$              ;Null
  2004.  MOVE.B D7,(A0)+
  2005.  CMP.B  #'$',D7
  2006.  DBEQ   D3,2$
  2007.  CLR.B  -7(A0)
  2008.  BSR    DUMP2
  2009.  LEA    TBUFF(A4),A0
  2010.  BRA    PLIN_F_S_W
  2011.  
  2012. CJ_BAD
  2013.  LEA    MJ_BAD(PC),A0
  2014.  BRA    PR_BAD
  2015.  
  2016.  
  2017. ***
  2018. CMD_K ;
  2019. *
  2020.  MOVEQ  #4,D7           ;TO
  2021.  MOVE.B (A0)+,D0
  2022.  CMP.B  #'M',D0         ;ME
  2023.  BEQ.S  2$
  2024.  MOVEQ  #$D,D7          ;MSG FLG
  2025.  CMP.B  #'T',D0
  2026.  BNE.S  1$
  2027.  MOVE.B D0,CMPCHR(A4)
  2028.  MOVE.B (A0)+,D0
  2029.  MOVEQ  #3,D7           ;KT
  2030. 1$
  2031.  CMP.B  D4,D0
  2032.  BNE.S  CK_BAD
  2033.  BSR    A0_GETNUM       ;Get decimal
  2034.  MOVE.L D0,CMPMSG(A4)
  2035. 2$
  2036.  LEA    DIR_R_FIB(A4),A5
  2037.  MOVE.L 12(A5),(A5)
  2038.  MOVE.L 16(A5),20(A5)
  2039.  CLR.B  CK_FLG(A4)
  2040. 3$
  2041.  TST.L  20(A5)
  2042.  BLE.S  5$              ;END
  2043.  BSR    LISTER
  2044.  BEQ.S  5$              ;Not Found
  2045.  MOVE.L LASTPT(A4),A0
  2046.  CMP.B  #'x',5(A0)
  2047.  BEQ    3$
  2048.  MOVE.B #'x',5(A0)      ;In DIR file
  2049.  LEA    MKILLD(PC),A0
  2050.  BSR    PLIN_F_S_W
  2051.  ADDQ.B #1,CK_FLG(A4)
  2052.  CMP.B  #4,D7           ;KM
  2053.  BEQ    3$
  2054. 5$
  2055.  MOVE.B CK_FLG(A4),D0
  2056.  BEQ.S  CK_BAD
  2057.  ADDQ.B #1,DIRCHG(A4)
  2058.  BRA    GRTS
  2059.  
  2060. CK_BAD
  2061.  LEA    MK_BAD(PC),A0
  2062.  BRA    PR_BAD
  2063.  
  2064. ***
  2065. CMD_F; F> Reverse forward
  2066. *
  2067.  MOVE.B #50,STACNT(A4)
  2068.  LEA    FWD_R_FIB(A4),A5
  2069.  TST.L  12(A5)
  2070.  BNE.S  1$
  2071.  BSR    A5_READ_FILE
  2072. 1$
  2073.  BSR    BIDRED
  2074.  MOVE.L BIDADR(A4),D3
  2075.  BNE.S  3$
  2076.  BSR    CLEAN_DIR_2     ;Update for last forward
  2077. 3$
  2078.  BSR    BIDUPD
  2079.  BSR    CKSTAT
  2080.  LEA    DIR_R_FIB(A4),A5
  2081.  MOVE.L 12(A5),(A5)
  2082.  MOVE.L 16(A5),20(A5)
  2083.  BLE    CF_END         ;END
  2084.  
  2085.  MOVEQ  #0,D7          ;All
  2086.  BSET.B #7,D7          ;NoList
  2087. CF1
  2088.  BSR    LISTER
  2089.  BEQ    CF_END         ;Not Found
  2090. * LEA    LSTLIN(A4),A0
  2091.  CLR.L  BIDADR(A4)
  2092.  MOVE.W 6(A0),D0
  2093.  TST.B  SIDBID(A4)
  2094.  BEQ.S  01$
  2095.  CMP.B  #'$',6(A0)
  2096.  BNE.S  01$
  2097.  CMP.B  U_BID(A4),D0
  2098.  BEQ    CF1            ;Sent already
  2099.  BSR    BIDMSG
  2100.  BNE.S  02$
  2101. 01$
  2102.  CMP.W  #'N ',D0       ;Past Forward/Read
  2103.  BNE    CF1
  2104. 02$
  2105.  CMP.B  #'/',4(A0)
  2106.  BEQ    CF5            ;Forced forward
  2107.  
  2108.  LEA    LSTLIN+28(A4),A0
  2109.  CMP.B  (A0),D4
  2110.  BNE.S  1$             ;No @BBS
  2111.  LEA    LSTLIN+14(A4),A0  ;To call
  2112. 1$
  2113.  LEA    U_CALL(A4),A1
  2114.  BSR    STR_CMP
  2115.  BEQ.S  CF5            ;@ BBS
  2116.  
  2117.  TST.L  BIDADR(A4)
  2118.  BNE.S  109$
  2119.  MOVE.L LSTLIN+28(A4),D0
  2120.  MOVEQ  #3,D3
  2121. 102$
  2122.  SUBQ.B #1,D3
  2123.  BMI    CF1
  2124.  ROL.L  #8,D0
  2125.  CMP.B  #'0',D0
  2126.  BLT    CF1             ;@fmt needs number for non-bid
  2127.  CMP.B  #'9',D0
  2128.  BGT    102$
  2129.  
  2130. 109$
  2131.  MOVE.L FWD_R_FIB+12(A4),A0     ;Match co-bbs call
  2132. 2$
  2133.  MOVEQ  #127,D3
  2134. 3$
  2135.  CMP.B  (A0)+,D4        ;Skip line
  2136.  DBGT   D3,3$
  2137.  CMP.B  #$A,-1(A0)
  2138.  BNE    CF1
  2139.  
  2140.  LEA    LSTLIN+28(A4),A1 ;@BBS
  2141.  CMP.B  (A1),D4
  2142.  BNE.S  4$
  2143.  LEA    LSTLIN+14(A4),A1 ;To call or zip
  2144. 4$
  2145.  BSR    STR_CMP
  2146.  BEQ.S  5$              ;All 6 match
  2147.  MOVEQ  #'!',D0
  2148.  CMP.B  #'?',-(A0)
  2149.  BEQ.S  5$              ;Wildcard
  2150.  CMP.B  (A0),D0
  2151.  BLT    2$
  2152.  CMP.B  -(A1),D0
  2153.  BLE    2$
  2154.  
  2155. 5$
  2156.  MOVE.B (A0)+,D0
  2157.  BEQ    CF1             ;To BBS not found
  2158.  CMP.B  #'*',D0
  2159.  BNE    5$
  2160.  
  2161.  LEA    U_CALL(A4),A1   ;Is this the BBS
  2162.  BSR    STR_CMP
  2163.  BEQ.S  CF5             ;All 6 match
  2164.  MOVEQ  #'!',D0
  2165.  CMP.B  -(A0),D0
  2166.  BLT    2$
  2167.  CMP.B  -(A1),D0
  2168.  BLE    2$
  2169.  
  2170. CF5
  2171.  MOVE.L LSTLIN(A4),D0   ;Msg #
  2172.  BSR    FIXNAM
  2173.  
  2174. *R:871030/1318z 439@N3ET [Allentown,PA] N:EPA/HTN3 Z:18103
  2175.  LEA    HDRLIN(A4),A1
  2176.  MOVE.W #'R:',(A1)+
  2177.  LEA    LSTLIN+35(A4),A0  ;Date/Time
  2178.  MOVEQ  #10,D3
  2179. 1$
  2180.  MOVE.B (A0)+,(A1)+
  2181.  DBEQ   D3,1$
  2182.  LEA    HDRLIN+4(A4),A0
  2183.  BSR    TIMUTC
  2184.  ADDQ.L #4,A0
  2185.  MOVE.L (A0),D0
  2186.  MOVE.B #'/',(A0)+
  2187.  MOVEQ  #3,D3
  2188. 020$
  2189.  ROL.L  #8,D0
  2190.  MOVE.B D0,(A0)+
  2191.  DBRA   D3,020$
  2192.  
  2193.  MOVE.B #'z',(A1)+
  2194.  MOVE.B D4,(A1)+
  2195.  LEA    LSTLIN(A4),A0
  2196. 021$
  2197.  CMP.B  (A0)+,D4
  2198.  BEQ    021$
  2199.  SUBQ.L #1,A0
  2200. 023$
  2201.  MOVE.B (A0)+,(A1)+     ;Msg#
  2202.  CMP.B  #'0',(A0)
  2203.  BGE    023$
  2204.  
  2205.  MOVE.L FWD_R_FIB+12(A4),A0
  2206.  MOVEQ  #79,D3
  2207. 3$
  2208.  MOVE.B (A0)+,(A1)
  2209.  CMP.B  (A1)+,D4
  2210.  DBGT   D3,3$
  2211.  CLR.B  (A1)
  2212.  
  2213.  LEA    MSG_R_FIB(A4),A5
  2214.  BSR    A5_READ_FILE
  2215.  BEQ    CF_END
  2216.  
  2217.  LEA    FWDTMP(A4),A1
  2218.  MOVE.B #'S',(A1)+      ;SP WA3MNT < N3ET @ N3DPU
  2219.  MOVE.B LSTLIN+5(A4),(A1)+
  2220.  MOVE.B D4,(A1)+
  2221.  LEA    LSTLIN+14(A4),A0
  2222.  BSR    PLSPC
  2223.  MOVE.B #'<',(A1)+
  2224.  MOVE.B D4,(A1)+
  2225.  LEA    LSTLIN+21(A4),A0
  2226.  BSR    PLSPC
  2227.  LEA    LSTLIN+28(A4),A0
  2228.  CMP.B  (A0),D4
  2229.  BGE.S  8$
  2230.  MOVE.B #'@',(A1)+
  2231.  MOVE.B D4,(A1)+
  2232.  BSR    PLSPC
  2233. 8$
  2234.  MOVE.L BIDADR(A4),D3
  2235.  BEQ.S  88$
  2236.  MOVE.L D3,A0
  2237.  
  2238.  LEA    45(A0),A0
  2239.  MOVEQ  #29,D3
  2240. 83$
  2241.  MOVE.B (A0)+,(A1)+
  2242.  CMP.B  (A0),D4        ;Space
  2243.  DBGE   D3,83$
  2244.  
  2245. 88$
  2246.  MOVE.B #$A,(A1)+
  2247.  CLR.B  (A1)
  2248.  LEA    FWDTMP(A4),A0
  2249.  BSR    PLIN_F_S_W
  2250.  
  2251.  BSR    FAKE          ;~Enter Title
  2252.  TST.B  SIDBID(A4)
  2253.  BEQ.S  89$
  2254.  CMP.B  #'O',(A0)
  2255.  BEQ.S  89$
  2256.  SUB.B  #'N',(A0)
  2257.  MOVE.B (A0),DSCFLG(A4)
  2258.  BNE    CF_END        ;Already got, but ??
  2259.  BSR    BIDUPD
  2260.  CLR.L  BIDADR(A4)
  2261.  BSR    FARROW
  2262.  BRA    CMD_F
  2263.  
  2264. 89$
  2265.  MOVE.L LASTPT(A4),A0
  2266.  LEA    46(A0),A0     ;Title
  2267. 92$
  2268.  MOVE.B (A0),D7
  2269.  BSR    PCHR_F_S_W
  2270.  CMP.B  (A0)+,D4
  2271.  BLE    92$
  2272.  TST.B  SIDBID(A4)
  2273.  BNE.S  9$
  2274.  BSR    FAKE          ;~Enter Text
  2275. 9$
  2276.  LEA    HDRLIN(A4),A0
  2277.  BSR    PLIN_F_S_W
  2278.  MOVE.L 12(A5),A0     ;Mid Pointer
  2279. CF2
  2280.  BSR    PSTR
  2281.  SUB.L  D0,16(A5)
  2282.  BGT    CF2
  2283.  BSR    W_STAT
  2284.  LEA    CTLZ(PC),A0     ;^Z LF
  2285.  BSR    PLIN_S_W
  2286.  BSR    FARROW          ;Forces bye if disconnect
  2287.  ADDQ.B #1,CR_FLG(A4)   ;A file was read
  2288.  ADDQ.B #1,DIRCHG(A4)   ;DIR changed for 'Y'
  2289.  MOVEQ  #'x',D0
  2290.  MOVE.L LASTPT(A4),A0
  2291.  CMP.B  #'$',6(A0)
  2292.  BNE.S  9$
  2293.  MOVE.B U_BID(A4),D0
  2294. 9$
  2295.  MOVE.B D0,7(A0)
  2296.  BRA    CMD_F
  2297.  
  2298. CF_END
  2299.  BSR    CLEAN_DIR_2     ;Update last forward
  2300.  MOVE.B F7_RUN(A4),FR_RUN(A4)  ;Send F> next
  2301.  BEQ.S  2$
  2302.  CLR.B  F7_RUN(A4)
  2303.  RTS
  2304.  
  2305. 2$
  2306.  LEA    MDONE(PC),A0
  2307.  BRA    PR_BAD
  2308.  
  2309. PLSPC
  2310.  MOVEQ  #8,D3
  2311. 1$
  2312.  MOVE.B (A0)+,(A1)
  2313.  CMP.B  (A1)+,D4        ;Space
  2314.  DBGE   D3,1$
  2315.  RTS
  2316.  
  2317. FAKE
  2318.  BSR    GETLIN
  2319.  BNE    CMD_B
  2320.  RTS
  2321.  
  2322.  
  2323. ***
  2324. CMD_L; List file directory
  2325. *
  2326.  MOVE.B #127,LLCNT(A4) ;For msg hdr
  2327.  MOVEQ  #$20,D7        ;>Msg
  2328.  CMP.B  #$A,(A0)
  2329.  BNE.S  1$
  2330.  MOVE.L U_MSG(A4),CMPMSG(A4)
  2331.  BRA.S  5$
  2332.  
  2333. 1$
  2334.  MOVE.B (A0)+,D0
  2335.  MOVE.B D0,CMPCHR(A4)
  2336.  CLR.L  D7
  2337.  
  2338.  CMP.B  #'L',D0         ;LL nn
  2339.  BNE.S  2$
  2340.  CMP.B  (A0)+,D4
  2341.  BNE.S  CL_BAD
  2342.  BSR    A0_GETNUM
  2343.  BGT.S  CL_BAD
  2344.  AND.W  #$F0F,D0
  2345.  MOVE.W D0,-(SP)
  2346.  LSR.W  #5,D0    x8
  2347.  ADD.W  D0,(SP)
  2348.  LSR.B  #2,D0    x2
  2349.  ADD.W  (SP)+,D0
  2350.  MOVE.B D0,LLCNT(A4)    ;LL count
  2351.  BRA.S  5$
  2352.  
  2353. 2$
  2354.  CMP.B  #$A,(A0)
  2355.  BNE.S  CL_BAD
  2356.  MOVEQ  #4,D7           ;TO LM or L>
  2357.  CMP.B  #'M',D0
  2358.  BEQ.S  5$
  2359.  CMP.B  #'>',D0
  2360.  BEQ.S  5$
  2361.  MOVEQ  #8,D7           ;FROM L<
  2362.  CMP.B  #'<',D0
  2363.  BEQ.S  5$
  2364.  CMP.B  D4,D0
  2365.  BEQ.S  CL_BAD
  2366.  
  2367.  MOVEQ  #2,D7           ;BFLAG
  2368. 5$
  2369.  BSR    FILL_CMPLIN
  2370.  LEA    DIR_R_FIB(A4),A5
  2371.  MOVE.L 12(A5),(A5)     ;Mid Pointer
  2372.  MOVE.L 16(A5),20(A5)   ;Byte cntr
  2373. 7$
  2374.  BSR    LISTER
  2375.  BEQ.S  9$
  2376.  MOVE.B LLCNT(A4),D0
  2377.  BGT.S  7$
  2378. 9$
  2379.  MOVE.L NXTMSG(A4),NXTLST(A4)    ;Set last read
  2380.  CMP.B  #127,LLCNT(A4)
  2381.  BEQ    PNONE
  2382.  BRA    GRTS            ;EOF
  2383.  
  2384. CL_BAD
  2385.  LEA    ML_BAD(PC),A0
  2386.  BRA    PR_BAD
  2387.  
  2388.  
  2389. ***
  2390. W_STAT
  2391. *
  2392.  CLR.B  CLOCK1(A4)
  2393. 2$
  2394.  BSR    WAIT
  2395.  MOVE.B CLOCK1(A4),D0
  2396.  BEQ    2$
  2397.  BTST.B #2,D0
  2398.  BNE    2$
  2399.  BSR.S  CKSTAT
  2400.  BMI    CMD_B
  2401.  CMP.B  #'C',STATUS(A4)
  2402.  BNE    W_STAT
  2403.  RTS
  2404.  
  2405.  
  2406. ***
  2407. CKSTAT ;Poll TNC Status
  2408. *
  2409.  MOVEM.L D0-D7/A0-A6,-(SP)
  2410.  CLR.B  STATUS(A4)
  2411. 0$
  2412.  LEA    TNCSTA(PC),A0
  2413.  BSR    PLIN_S
  2414.  BSR    DUMP2
  2415.  BSR    GETLIN
  2416.  LEA    12(A0),A0
  2417.  MOVE.L #' IO ',D0
  2418.  CMP.L  (A0)+,D0
  2419.  BNE.S  9$
  2420.  SUBQ.B #1,STACNT(A4)
  2421.  BEQ.S  5$
  2422.  MOVE.B (A0),STATUS(A4)
  2423.  CMP.B  #'D',(A0)
  2424.  BNE.S  9$
  2425. 5$
  2426.  MOVE.B #-1,STATUS(A4)
  2427.  ADDQ.B #1,DSCFLG(A4)
  2428. 9$
  2429.  LEA    TNCCON(PC),A0
  2430.  BSR    DUMPER
  2431.  TST.B  STATUS(A4)
  2432.  BEQ    0$
  2433.  MOVEM.L (SP)+,D0-D7/A0-A6
  2434.  RTS
  2435.  
  2436.  
  2437. ***
  2438. CMD_NAME; Get user name
  2439. *
  2440.  CMP.B  #$A,(A0)
  2441.  BEQ.S  11$
  2442.  MOVE.L A0,-(SP)
  2443.  CMP.B  (A0)+,D4
  2444.  BNE.S  CN_BAD
  2445.  MOVEQ  #17,D3
  2446. 1$
  2447.  CMP.B  #'A',(A0)+
  2448.  DBLT   D3,1$
  2449.  CLR.B  (A0)
  2450.  CMP.B  #$A,-(A0)
  2451.  BNE.S  CN_BAD
  2452.  
  2453.  MOVE.L (SP)+,A0
  2454.  LEA    U_NAME(A4),A1
  2455.  MOVEQ  #19,D3
  2456. 2$
  2457.  MOVE.B (A0)+,(A1)+
  2458.  DBEQ   D3,2$
  2459. 11$
  2460.  LEA    U_NAME(A4),A0
  2461.  BRA    PLIN_F_S_W
  2462.  
  2463. CN_BAD
  2464.  MOVE.L (SP)+,A0
  2465.  LEA    MN_BAD(PC),A0
  2466.  BRA    PR_BAD
  2467.  
  2468.  
  2469. ***
  2470. CMD_R; Read cmd
  2471. *
  2472.  CMP.W  #$560A,RBUFF(A4)
  2473.  BNE.S  2$
  2474.  LEA    MAMIG1(PC),A0   ;Version
  2475.  BRA    PLIN_F_S_W
  2476.  
  2477. 2$
  2478.  CLR.B  CR_FLG(A4)
  2479.  MOVE.B (A0)+,D0
  2480.  MOVEQ  #4,D7           ;Comp flags - TO
  2481.  CMP.B  #'M',D0
  2482.  BEQ.S  3$
  2483.  CMP.B  D4,D0
  2484.  BNE    CR_BAD
  2485.  BSR    A0_GETNUM       ;Get decimal
  2486.  MOVE.L D0,CMPMSG(A4)
  2487.  MOVEQ  #1,D7           ;MSG FLG
  2488. 3$
  2489.  LEA    DIR_R_FIB(A4),A5
  2490.  MOVE.L 12(A5),(A5)
  2491.  MOVE.L 16(A5),20(A5)
  2492.  
  2493. CR1
  2494.  TST.L  20(A5)
  2495.  BLE.S  CR_END         ;END
  2496.  BSR    LISTER
  2497.  BEQ.S  CR_END         ;Not Found
  2498.  
  2499.  MOVE.L LSTLIN(A4),D0  ;Msg
  2500.  BSR    FIXNAM         ;Fix Filename
  2501.  
  2502. CM8A
  2503.  LEA    MSG_R_FIB(A4),A5
  2504.  BSR    A5_READ_FILE
  2505.  BEQ    BRTS
  2506.  BSR    WAIT
  2507.  MOVE.L 12(A5),A0
  2508.  CMP.B  #'R',RBUFF(A4)
  2509.  BNE.S  5$
  2510.  BSR    PATHER
  2511.  LEA    TMPMEM(A4),A0
  2512.  BSR    PLIN_F_S_W
  2513.  MOVE.L A0SAV(A4),A0
  2514. 5$
  2515.  MOVE.B DSCFLG(A4),D0
  2516.  BNE.S  CR_BAD
  2517.  BSR    PSTR
  2518.  MOVE.L 12(A5),D0
  2519.  ADD.L  16(A5),D0
  2520.  CMP.L  A0,D0           ;Curraddr,endaddr
  2521.  BGT    5$
  2522.  ADDQ.B #1,CR_FLG(A4)   ;A file was read
  2523.  ADDQ.B #1,DIRCHG(A4)   ;DIR changed for 'Y'
  2524.  MOVE.L LASTPT(A4),A0
  2525.  MOVE.B #'.',7(A0)
  2526.  BTST.L #2,D7           ;RM
  2527.  BEQ    GRTS            ;EOF
  2528.  LEA    DIR_R_FIB(A4),A5
  2529.  BRA    CR1
  2530.  
  2531. CR_END
  2532.  MOVE.B CR_FLG(A4),D0
  2533.  BNE    GRTS
  2534.  BTST.L #2,D7
  2535.  BNE    PNONE
  2536. CR_BAD
  2537.  LEA    MR_BAD(PC),A0
  2538.  BRA    PR_BAD
  2539.  
  2540.  
  2541. ***
  2542. CMD_S; Send cmd
  2543. *
  2544.  CLR.B  BIDBUF+45(A4)
  2545.  MOVE.L A0,-(SP)
  2546.  MOVE.L NXTMSG(A4),D0
  2547.  BSR    FIXNAM      ;Fix Filename
  2548.  BSR    FILL_CMPLIN
  2549.  LEA    CMPLIN(A4),A1
  2550.  MOVE.L NXTMSG(A4),(A1)+  ;Message number
  2551.  MOVE.L (SP)+,A0
  2552.  ADDQ.L #1,A1
  2553.  MOVE.B (A0),(A1)+        ;Sx
  2554.  BEQ    CS_BAD
  2555.  MOVE.B #'N',(A1)
  2556.  CMP.B  (A0)+,D4
  2557.  BGT    CS_BAD
  2558.  BEQ.S  1$
  2559.  CMP.B  (A0)+,D4
  2560.  BNE    CS_BAD
  2561. 1$
  2562.  LEA    CMPLIN+14(A4),A1   ;TO
  2563.  BRA.S  5$
  2564.  
  2565. 2$
  2566.  LEA    CMPLIN+28(A4),A1   ;@ BBS
  2567.  BRA.S  5$
  2568.  
  2569. 4$
  2570.  LEA    CMPLIN+21(A4),A1   ;FROM
  2571. 5$
  2572.  MOVEQ  #5,D3
  2573.  CMP.B  (A0),D4
  2574.  BNE.S  6$
  2575.  ADDQ.L #1,A0
  2576. 6$
  2577.  MOVE.B (A0)+,D0
  2578.  CMP.B  D4,D0
  2579.  BLT.S  8$         ;Drop C/R
  2580.  CMP.B  #'@',D0
  2581.  BEQ    2$
  2582.  CMP.B  #'<',D0
  2583.  BEQ    4$
  2584.  MOVE.B D0,(A1)+
  2585.  CMP.B  D4,D0
  2586.  DBEQ   D3,6$
  2587. 7$
  2588.  MOVE.B (A0)+,D0
  2589.  BEQ.S  8$
  2590.  CMP.B  #'<',D0
  2591.  BEQ    4$
  2592.  CMP.B  #'@',D0
  2593.  BEQ    2$
  2594.  CMP.B  #'$',D0
  2595.  BNE    7$
  2596.  TST.B  SIDBID(A4)
  2597.  BEQ    CMD_B           ;Not BIDABLE BBS
  2598.  BSR    BIDRED
  2599.  MOVE.B D0,CMPLIN+6(A4)
  2600.  LEA    BIDBUF(A4),A1
  2601.  MOVE.L NXTMSG(A4),(A1)+
  2602.  MOVEQ  #40,D3      ;End at +45
  2603. 70$
  2604.  MOVE.B D4,(A1)+
  2605.  DBRA   D3,70$
  2606.  MOVEQ  #32,D3
  2607.  SUBQ.L #1,A0
  2608. 71$
  2609.  MOVE.B (A0)+,(A1)+
  2610.  DBEQ   D3,71$
  2611.  CLR.B  -(A1)
  2612.  MOVE.B #$A,-(A1)
  2613.  BSR    BIDCHK
  2614.  BNE.S  8$
  2615.  MOVE.L A0,BIDADR(A4)
  2616.  MOVEQ  #'N',D7
  2617.  BSR    PCHR_F_S_W
  2618.  LEA    BIDBUF+45(A4),A0
  2619.  BSR    PLIN_F_S_W
  2620.  BRA    BIDUPD            ;Flag as got
  2621.  
  2622. 8$
  2623.  LEA    CMPLIN+21(A4),A0  ;FROM
  2624.  MOVE.L A0,A1
  2625.  BSR    MOVE_VALID_CALL   :Dummy move to check call
  2626.  BNE.S  9$                ;OK
  2627.  LEA    U_CALL(A4),A0
  2628.  LEA    CMPLIN+21(A4),A1
  2629.  MOVE.B D4,5(A1)          ;N3ET won't overwrite KAA3MN
  2630.  BSR    MOVE_VALID_CALL
  2631.  BEQ    ABORTB            ;Bad user call ~ELK
  2632. 9$
  2633.  LEA    TIMLIN(A4),A0
  2634.  LEA    CMPLIN+35(A4),A1  ;Date
  2635.  MOVEQ  #9,D3
  2636. 10$
  2637.  MOVE.B (A0)+,(A1)+
  2638.  DBRA   D3,10$
  2639.  
  2640.  LEA    MS_TIT(PC),A0   ;Enter Title
  2641.  BSR    PLIN_F_S_W
  2642.  LEA    BBS_MSG+2(A4),A0
  2643.  BSR    PLIN_F_S_W
  2644.  MOVEQ  #$A,D7
  2645.  BSR    PCHR_F_S_W
  2646.  BSR    GETLIN
  2647.  BNE    CMD_B  *ABORTB
  2648.  LEA    CMPLIN+46(A4),A1 ;Title
  2649. * MOVEQ  #31,D3           ;32 CHR + LF + NULL
  2650.  MOVEQ  #80,D3           ;80 CHR + LF + NULL
  2651. 20$
  2652.  MOVE.B (A0)+,(A1)+
  2653.  CMP.B  (A0),D4
  2654.  DBGT   D3,20$
  2655.  MOVE.B #$A,(A1)+
  2656.  CLR.B  (A1)
  2657.  
  2658.  MOVE.B BIDBUF+45(A4),D0
  2659.  OR.B   SIDBID(A4),D0
  2660.  BNE.S  222$
  2661.  LEA    MS_MSG(PC),A0   ;Enter message
  2662.  BSR    PLIN_F_S_W
  2663. 222$
  2664.  LEA    MSG_W_FIB(A4),A5
  2665.  BSR    A5_OPEN_WRITE
  2666.  BEQ    CMD_B
  2667.  CLR.L  SIZMSG(A4)
  2668.  LEA    BUFSEN(A4),A1
  2669.  MOVE.L A1,12(A5)
  2670.  MOVE.L A1,(A5)
  2671.  CLR.L  20(A5)
  2672. 21$
  2673.  TST.B  ZFLG(A4)
  2674.  BNE.S  30$
  2675.  BSR    GETLIN          ;D3=Length
  2676.  BNE.S  FLUSHA
  2677.  MOVE.L (A5),A1
  2678.  CMP.B  #$A,(A0)
  2679.  BNE.S  25$
  2680.  TST.B  ZFLG(A4)
  2681.  BNE.S  30$
  2682. 25$
  2683.  MOVE.B (A0)+,(A1)+
  2684.  BEQ    21$
  2685.  MOVE.L A1,(A5)
  2686.  ADDQ.L #1,20(A5)
  2687.  CMP.L  #SENSIZ,20(A5)
  2688.  BNE.S  25$
  2689.  BSR.S  FLUSH
  2690.  TST.W  SIZMSG(A4)      ;65k max
  2691. * BNE.S  FLUSHA
  2692. * TST.B  ZFLG(A4)
  2693.  BEQ    25$
  2694. 30$
  2695.  BSR.S  FLUSH
  2696.  BSR    A5_CLOSE
  2697.  MOVE.L SIZMSG(A4),-(SP)
  2698.  PEA    CMPLIN+7(A4)    ;To
  2699.  PEA    FMT1(PC)        ;Format spec
  2700.  BSR    SPRINT
  2701.  LEA    12(SP),SP
  2702.  MOVE.B D4,CMPLIN+13(A4) ;Over NULL
  2703.  BSR    BIDADD
  2704.  BRA    CLEAN_DIR
  2705.  
  2706. CS_BAD
  2707.  LEA    MS_BAD(PC),A0
  2708.  BRA.S  PR_BAD
  2709.  
  2710. FLUSHA; Flush msg and abort
  2711.  BSR.S  FLUSH
  2712.  BRA    CMD_B
  2713.  
  2714. FLUSH
  2715.  MOVE.L A0,-(SP)
  2716.  BSR    A5_WRITE
  2717.  ADD.L  D0,SIZMSG(A4)
  2718.  MOVE.L 12(A5),(A5)
  2719.  MOVE.L (A5),A1
  2720.  CLR.L  20(A5)
  2721.  MOVE.L (SP)+,A0
  2722.  RTS
  2723.  
  2724.  
  2725. ***
  2726. CMD_T; Talk to SYSOP
  2727. *
  2728.  LEA    MTALK(PC),A0
  2729.  BRA.S  PR_BAD
  2730.  
  2731. PNONE
  2732.  LEA    MNONE(PC),A0
  2733.  BRA.S  PR_BAD
  2734.  
  2735. ***
  2736. CMD_HUH; Not valid command
  2737. *
  2738.  LEA    MHUH(PC),A0
  2739. PR_BAD
  2740.  ADDQ.B #1,BADCNT(A4)
  2741.  BRA    PLIN_F_S_W
  2742.  
  2743.  
  2744. ***
  2745. A5_GET_LINE; Get line from send buffer
  2746. *
  2747.  LEA    LSTLIN(A4),A0
  2748.  MOVE.L A0,-(SP)
  2749.  MOVE.L (A5),A6
  2750.  MOVE.L A6,LASTPT(A4)
  2751.  MOVEQ  #78,D3          ;79 CHR+NULL
  2752. GL1
  2753.  MOVE.B (A6),(A0)+
  2754. GL2
  2755.  SUBQ.L #1,20(A5)
  2756.  BLE.S  GL4
  2757.  CMP.B  #$A,(A6)+
  2758.  BEQ.S  GL4
  2759.  SUBQ.L #1,D3
  2760.  BPL    GL1
  2761.  BRA    GL2
  2762. GL4
  2763.  MOVE.L A6,(A5)
  2764.  CLR.B  (A0)
  2765.  MOVE.B #$A,-(A0)
  2766.  MOVE.L (SP)+,A0
  2767.  RTS
  2768.  
  2769.  
  2770. ***
  2771. GET_USR_DATA; Get User data from BBS.USR
  2772. *
  2773.  CLR.L  U_PTR(A4)
  2774.  LEA    USR_R_FIB(A4),A5
  2775.  BSR    A5_READ_FILE
  2776.  BEQ.S  BRTS
  2777. *
  2778.  MOVE.L 12(A5),A0      ;Buff
  2779. * MOVE.L 16(A5),20(A5)  ;Byte cnt
  2780.  BRA.S  2$
  2781.  
  2782. 1$
  2783.  SUBQ.L #1,20(A5)
  2784.  BEQ.S  GRTS           ;EOF, Call not found
  2785.  CMP.B  #$A,(A0)+
  2786.  BNE    1$
  2787. 2$
  2788.  MOVE.L A0,A6
  2789.  LEA    U_CALL(A4),A1
  2790.  MOVEQ  #8,D3
  2791. 3$
  2792.  CMP.B  (A0)+,(A1)+    ;Compare call
  2793.  DBNE   D3,3$
  2794.  BNE    1$             ;Try next
  2795.  MOVE.L A6,U_PTR(A4)
  2796.  LEA    U_LINE(A4),A1
  2797. 4$
  2798.  MOVE.B (A6)+,(A1)+
  2799.  CMP.B  #'.',(A6)
  2800.  BEQ.S  BRTS           ;Call not allowed
  2801.  CMP.B  (A6),D4
  2802.  BLE    4$
  2803.  MOVE.B #$A,(A1)+
  2804.  CLR.B  (A1)
  2805. * BRA    GRTS
  2806.  
  2807. GRTS; True
  2808.  MOVEQ  #1,D0
  2809.  RTS
  2810.  
  2811. BRTS; False
  2812.  CLR.L  D0
  2813.  RTS
  2814.  
  2815. ***
  2816. CLEAN_USR; Update USR disk file
  2817. *
  2818.  LEA    USR_W_FIB(A4),A5
  2819.  BSR    A5_OPEN_WRITE
  2820.  BEQ.S  5$
  2821.  MOVE.L U_CNT(A4),D0
  2822.  BSR    INC_ABCD
  2823.  MOVE.L D0,U_CNT(A4)
  2824.  LEA    U_LINE(A4),A0
  2825.  MOVE.L A0,A1
  2826. 1$
  2827.  CMP.B  (A1)+,D4
  2828.  BLE    1$
  2829.  MOVE.B #$A,-1(A1)
  2830.  SUBA.L A0,A1
  2831.  MOVE.L A0,12(A5)       ;TOP_ADR
  2832.  MOVE.L A1,20(A5)       ;TOP_SIZ
  2833.  BSR    A5_WRITE        ;User on top
  2834.  BEQ.S  5$
  2835.  LEA    USR_R_FIB+12(A4),A6
  2836.  MOVE.L (A6)+,12(A5)    ;Buff
  2837.  MOVE.L (A6),20(A5)     ;Size
  2838.  BSR    A5_WRITE
  2839. 5$
  2840.  BRA    A5_CLOSE
  2841.  
  2842.  
  2843. ***
  2844. CLEAN_DIR; After a 'S' command
  2845. *
  2846.  LEA    DIR_W_FIB(A4),A5
  2847.  BSR    A5_OPEN_WRITE
  2848.  BEQ    ABORTB
  2849.  LEA    CMPLIN(A4),A0
  2850.  MOVE.L A0,A1
  2851.  MOVEQ  #127,D3         ;#79,D3
  2852. 1$
  2853.  CMP.B  (A1)+,D4
  2854.  DBGT   D3,1$
  2855.  MOVE.B #$A,-1(A1)
  2856.  SUB.L  A0,A1
  2857.  MOVE.L A0,12(A5)       ;TOP_ADR
  2858.  MOVE.L A1,20(A5)       ;TOP_SIZ
  2859.  MOVE.L A1,D0
  2860.  BEQ    ABORTB          ;Zero lenght user call? ELK
  2861.  BSR    A5_WRITE        ;User line added on top
  2862.  BEQ    ABORTB
  2863.  BRA.S  CLD3
  2864.  
  2865. CLEAN_DIR_2             ;After a 'K' command
  2866.  TST.B  DSCFLG(A4)
  2867.  BNE    ABORTB
  2868.  MOVE.B DIRCHG(A4),D0
  2869.  BEQ    GRTS            ;DIR not changed
  2870.  LEA    DIR_W_FIB(A4),A5
  2871.  BSR    A5_OPEN_WRITE
  2872.  BEQ    ABORTB
  2873. CLD3
  2874.  LEA    DIR_R_FIB+12(A4),A6
  2875.  MOVE.L (A6)+,(A5)   ;Mid Ptr
  2876.  MOVE.L (A6),20(A5)  ;Byte cntr
  2877. 1$
  2878.  MOVEQ  #0,D7
  2879.  BSET.B #7,D7        ;No list
  2880.  BSR    LISTER
  2881.  MOVE.L LASTPT(A4),A6
  2882.  ADDQ.L #6,A6
  2883.  CMP.B  #'$',(A6)+
  2884.  BEQ.S  3$
  2885.  MOVE.B (A6),D0
  2886.  MOVE.B D4,(A6)      ;Clean '.' from DIR
  2887.  CMP.B  #'.',D0
  2888.  BNE.S  2$
  2889.  LEA    LSTLIN+14(A4),A0
  2890.  LEA    U_CALL(A4),A1
  2891.  BSR    STR_CMP
  2892.  BNE.S  3$           ;Not TO call
  2893.  MOVE.B #'Y',-(A6)
  2894. 2$
  2895.  CMP.B  #'x',D0
  2896.  BNE.S  3$
  2897.  MOVE.B #'F',-(A6)   ;Flag as Forwarded
  2898.  
  2899. 3$
  2900.  TST.L  20(A5)
  2901.  BGT    1$           ;Not EOF
  2902.  
  2903.  LEA    DIR_R_FIB+12(A4),A6
  2904.  MOVE.L (A6)+,12(A5)   ;Buff
  2905.  MOVE.L (A6),20(A5)    ;Size
  2906.  BSR    A5_WRITE
  2907.  BEQ    ABORTB
  2908.  BSR    A5_CLOSE
  2909.  CLR.B  DIRCHG(A4)
  2910. DIRRED
  2911.  LEA.L  DIR_R_FIB(A4),A5
  2912.  BSR    A5_READ_FILE    ;Force DIR_R update
  2913.  BEQ    ABORTB
  2914.  RTS
  2915.  
  2916.  
  2917. ***
  2918. A5_OPEN_READ; Open read file
  2919. *
  2920.  MOVE.L #1005,D2
  2921.  BRA.S  OW1
  2922.  
  2923. ***
  2924. A5_OPEN_WRITE; Open write file
  2925. *
  2926.  MOVE.L #1006,D2
  2927. OW1
  2928.  MOVE.L 4(A5),D1       ;*Name
  2929.  MOVE.L (A4),A6
  2930.  JSR    _LVOOpen(A6)
  2931.  MOVE.L D0,8(A5)       ;0=ERROR else *FH
  2932.  RTS
  2933.  
  2934.  
  2935. ***
  2936. A5_ALLOC_MEM; Grab free mem
  2937. *
  2938.  MOVE.L 16(A5),D0      ;Bytes
  2939.  ADDQ.L #8,D0
  2940.  CLR.L  D1             ;Any kind of mem
  2941.  MOVE.L 4,A6
  2942.  JSR    _LVOAllocMem(A6)
  2943.  MOVE.L D0,12(A5)      ;Addr
  2944. * BEQ    BRTS
  2945.  RTS
  2946.  
  2947.  
  2948. ***
  2949. A5_FREE_MEM; Give back mem
  2950. *
  2951.  BSR    A5_CLOSE
  2952.  MOVE.L 12(A5),D0      ;Addr
  2953.  BEQ    BRTS
  2954.  CLR.L  12(A5)
  2955.  MOVE.L D0,A1
  2956.  MOVE.L 16(A5),D0      ;Bytes
  2957.  CLR.L  16(A5)
  2958.  ADDQ.L #8,D0
  2959.  MOVE.L 4,A6
  2960.  JMP    _LVOFreeMem(A6)
  2961.  
  2962.  
  2963. ***
  2964. A5_READ; Read file per A5
  2965. *
  2966.  MOVE.W #_LVORead,D0
  2967.  MOVE.L 16(A5),20(A5)
  2968.  BRA.S  A5_R_W
  2969.  
  2970. ***
  2971. A5_WRITE; Write file per A5
  2972. *
  2973.  MOVE.W #_LVOWrite,D0
  2974. A5_R_W
  2975.  MOVE.L 8(A5),D1       ;Handle
  2976.  BEQ    ABORTB
  2977.  MOVE.L 12(A5),D2      ;Buff
  2978.  MOVE.L 20(A5),D3      ;Bytes
  2979.  MOVE.L (A4),A6
  2980.  JSR    0(A6,D0.W)
  2981.  MOVE.L D0,20(A5)      ;bytes
  2982.  BMI    ABORTB
  2983.  RTS
  2984.  
  2985.  
  2986. ***
  2987. A5_EXAMINE; Get disk info about file
  2988. *
  2989.  BSR    A5_FREE_MEM    ;Free if old
  2990.  MOVE.L 4(A5),D1       ;*Filename
  2991.  MOVEQ  #-2,D2         ;ACCESS_READ
  2992.  MOVE.L (A4),A6
  2993.  JSR    _LVOLock(A6)
  2994.  MOVE.L D0,D1          ;Lock
  2995.  BEQ    BRTS           ;Fail
  2996.  MOVE.L D1,-(SP)
  2997.  LEA    TMPMEM(A4),A0
  2998.  MOVE.L A0,D2
  2999.  JSR    _LVOExamine(A6)
  3000.  BEQ.S  1$             ;Fail
  3001.  MOVE.L TMPMEM+$7C(A4),16(A5)  ;fib_Size
  3002. 1$
  3003.  MOVE.L (SP)+,D1
  3004.  JMP    _LVOUnLock(A6)
  3005.  
  3006. ***
  3007. BIDRED ;Open, Read, close BID file
  3008. *
  3009.  MOVEM.L A0-A6/D0-D6,-(SP)
  3010.  LEA    BID_R_FIB(A4),A5
  3011.  BSR.S  A5_READ_FILE
  3012.  LEA    MPATH+5(PC),A1
  3013.  MOVE.L FWD_R_FIB+12(A4),A2     ;Mycall for pather
  3014.  CMP.B  #'@',(A2)+
  3015.  BNE.S  1$
  3016.  MOVEQ  #8,D3
  3017. 0$
  3018.  MOVE.B (A2)+,(A1)
  3019.  CMP.B  (A1)+,D4
  3020.  DBGE   D3,0$
  3021.  CLR.B  (A1)
  3022. 1$
  3023.  MOVEM.L (SP)+,A0-A6/D0-D6
  3024.  RTS
  3025.  
  3026. ***
  3027. A5_READ_FILE; Get mem & fill with file
  3028. *
  3029.  MOVE.L 8(A5),D1
  3030.  BNE    GRTS            ;Already open
  3031.  BSR    A5_EXAMINE
  3032.  MOVE.L 16(A5),20(A5)   ;Size
  3033.  BEQ    BRTS
  3034.  BSR    A5_ALLOC_MEM
  3035.  BEQ    BRTS            ;Fail
  3036.  BSR    A5_OPEN_READ
  3037.  BEQ    BRTS
  3038.  BSR    A5_READ
  3039.  BEQ    BRTS
  3040.  
  3041. ***
  3042. A5_CLOSE; Close file per A5
  3043. *
  3044.  MOVE.L 8(A5),D1
  3045.  BEQ    GRTS
  3046.  MOVE.L (A4),A6
  3047.  JSR    _LVOClose(A6)
  3048.  CLR.L  8(A5)          ;Handle
  3049.  BRA    GRTS
  3050.  
  3051.  
  3052. ***
  3053. REM_SPC; Remove spaces, A0, lower to UPPER, NULL terminate
  3054. *
  3055.  MOVE.L A0,-(SP)
  3056.  MOVE.L A0,A1
  3057. 1$
  3058.  MOVE.B (A0),D0
  3059.  CMP.B  #'a',D0
  3060.  BLT.S  2$
  3061.  CMP.B  #'z',D0
  3062.  BGT.S  2$
  3063.  AND.B  #$5F,D0
  3064. 2$
  3065.  MOVE.B D0,(A1)+
  3066.  CMP.B  D4,D0
  3067.  BLT.S  4$
  3068. 3$
  3069.  CMP.B  (A0)+,D4
  3070.  BNE    1$
  3071.  CMP.B  (A0),D4
  3072.  BEQ    3$
  3073.  BRA    1$
  3074.  
  3075. 4$
  3076.  CLR.B  (A1)
  3077. * CMP.B  -(A1),D4
  3078. * BLE.S  4$
  3079.  MOVE.L (SP)+,A0
  3080.  RTS
  3081.  
  3082.  
  3083. ***
  3084. FILL_CMPLIN; Fill compare line with spaces
  3085. *
  3086.  LEA    CMPLIN(A4),A0
  3087.  MOVEQ  #127,D3
  3088. 1$
  3089.  MOVE.B D4,(A0)+
  3090.  DBEQ   D3,1$
  3091.  MOVE.B #$A,(A0)+
  3092.  CLR.B  (A0)+
  3093.  RTS
  3094.  
  3095.  
  3096. ***
  3097. INC_ABCD; Inc ASCII packed BCD number D0
  3098. *
  3099. *FORMAT; 20203939 = "  99"
  3100.  CLR.L  D1
  3101.  ROXL.B #1,D1           ;Clr X bit ??
  3102.  MOVEQ  #1,D1
  3103.  LEA    ABCDT1(A4),A0
  3104.  LEA    ABCDT2(A4),A1
  3105.  MOVE.L D0,(A0)+
  3106.  MOVE.L D1,(A1)+
  3107.  CLR.B  (A0)
  3108.  MOVEQ  #3,D0
  3109. IA1
  3110.  ABCD   -(A1),-(A0)    ;+X ??
  3111.  CMP.B  #$40,(A0)
  3112.  BNE.S  IA2
  3113.  MOVE.B #$30,(A0)
  3114.  ADDQ.B #1,-1(A1)      ;Watch for overflow!
  3115. IA2
  3116.  CMP.B  #$21,(A0)
  3117.  DBEQ   D0,IA1
  3118.  BNE.S  IA3
  3119.  MOVE.B #$31,(A0)
  3120. IA3
  3121.  MOVE.L ABCDT1(A4),D0
  3122.  RTS
  3123.  
  3124.  
  3125. ***
  3126. SPRINT; Format
  3127. *
  3128.  MOVEM.L D0/A0/A1/A2/A3/A6,-(SP)
  3129.  MOVE.L 28(SP),A0       ;Spec
  3130.  LEA    36(SP),A1       ;FromBuff
  3131.  LEA    1$(PC),A2       :Operation
  3132.  MOVE.L 32(SP),A3       ;ToBuff
  3133.  MOVE.L 4,A6
  3134.  JSR    -522(A6)        ;sprint
  3135.  MOVEM.L (SP)+,D0/A0/A1/A2/A3/A6
  3136.  RTS
  3137. 1$
  3138.  MOVE.B D0,(A3)+
  3139.  RTS
  3140.  
  3141.  
  3142. ***
  3143. STR_CMP; Compare *A0 to *A1 - 6 chars
  3144. **
  3145.  MOVEQ  #5,D3
  3146. SC1
  3147.  CMP.B  (A0)+,(A1)+
  3148.  DBNE   D3,SC1
  3149.  RTS
  3150.  
  3151.  
  3152. ***
  3153. LISTER; Get valid line from DIR and list
  3154. *00=ALL 0=MSG 1=BFLAG 2=TO 3=FROM 4=@BBS 5=>MSG 6=DELETED 7=NoList
  3155. *
  3156. LE1
  3157.  TST.L  20(A5)
  3158.  BLE    BRTS            ;END
  3159.  BSR    A5_GET_LINE
  3160.  CMP.B  #'x',5(A0)
  3161.  BEQ    LE1             ;Deleted
  3162.  MOVE.L D7,D0           ;ALL
  3163.  BEQ.S  LE_TO
  3164.  LSR.L  #1,D0           ;MSG
  3165.  BCS.S  LE_MSG
  3166.  LSR.L  #1,D0           ;LB
  3167.  BCS.S  LE_B
  3168.  LSR.L  #1,D0           ;TO
  3169.  BCS.S  LE_TO
  3170.  LSR.L  #1,D0           ;FROM
  3171.  BCS.S  LE_FROM
  3172.  LSR.L  #1,D0           ;@BBS
  3173.  BCS.S  LE_AT
  3174.  LSR.L  #1,D0           ;>MSG
  3175.  BCS.S  LE_MSG
  3176.  LSR.L  #2,D0           ;No list
  3177.  BCS.S  LE_LIST
  3178. LE_MSG
  3179.  MOVE.L CMPMSG(A4),D0
  3180.  CMP.L  (A0),D0
  3181.  BGT.S  LE1             ;Not number
  3182.  BEQ.S  LE_TO
  3183.  BTST.L #5,D7           ;>MSG
  3184.  BEQ    LE1
  3185.  
  3186. LE_TO
  3187.  CMP.B  #3,D7           ;KT
  3188.  BEQ.S  LE_B
  3189.  LEA    U_CALL(A4),A0
  3190.  LEA    LSTLIN+14(A4),A1
  3191.  BSR    STR_CMP
  3192.  BEQ.S  LE_LIST
  3193.  CMP.B  #$D,D7          ;Kill
  3194.  BEQ.S  LE_FROM
  3195.  BTST.L #2,D7           ;TO
  3196.  BNE    LE1
  3197.  
  3198. LE_FROM
  3199.  LEA    U_CALL(A4),A0
  3200.  LEA    LSTLIN+21(A4),A1
  3201.  BSR    STR_CMP
  3202.  BEQ.S  LE_LIST
  3203.  BTST.L #3,D7
  3204.  BNE    LE1
  3205.  
  3206.  CMP.B  #'P',LSTLIN+5(A4)
  3207.  BEQ    LE1
  3208.  BRA.S  LE_LIST
  3209.  
  3210. LE_AT
  3211.  LEA    U_CALL(A4),A0
  3212.  LEA    LSTLIN+28(A4),A1
  3213.  CMP.B  (A1),D4
  3214.  BNE.S  LE_LIST
  3215.  BRA    LE1
  3216.  
  3217. LE_B
  3218.  MOVE.B CMPCHR(A4),D0
  3219.  CMP.B  5(A0),D0
  3220.  BNE    LE1
  3221. LE_LIST
  3222.  LEA    LSTLIN(A4),A0
  3223.  BTST.B #7,D7           ;No list
  3224.  BNE    GRTS
  3225.  ADDQ.B #1,LHFLG(A4)
  3226.  BNE.S  1$
  3227.  LEA    MLHEAD(PC),A0
  3228.  BSR.S  5$
  3229.  LEA    LSTLIN(A4),A0
  3230. 1$
  3231.  SUBQ.B #1,LLCNT(A4)    ;LL count
  3232. 5$
  3233.  BSR    PLIN_F_S_W
  3234.  BRA    GRTS
  3235.  
  3236.  
  3237. ***
  3238. A0_GETNUM; Parse number from A0 to D0
  3239. *
  3240.  MOVE.L #'    ',D0
  3241. 1$
  3242.  LSL.L  #8,D0
  3243.  MOVE.B (A0)+,D0
  3244.  CMP.B  #'9',D0
  3245.  BGT.S  2$              ;BAD
  3246.  CMP.B  #'0',(A0)       ;Next byte number?
  3247.  BGE.S  1$
  3248. 2$
  3249.  RTS
  3250.  
  3251. ***
  3252. FIXNAM; Remove spaces, put filename for R/W
  3253. *
  3254.  ROL.L  #8,D0
  3255.  SUB.B  D4,D0
  3256.  BEQ    FIXNAM
  3257.  ADD.B  D4,D0
  3258.  ROR.L  #8,D0
  3259.  MOVE.L D0,BBS_MSG+2(A4)
  3260.  CLR.B  BBS_MSG+6(A4)
  3261.  RTS
  3262.  
  3263.  
  3264. ***
  3265. TIMUTC; Convert ASCII time A0 to UTC 880901/1229
  3266. *
  3267.  MOVEQ  #3,D3   ;+5 hrs
  3268. 0$
  3269.  BSR.S  1$
  3270.  DBRA   D3,0$
  3271. 1$
  3272.  CMP.B  #'9',5(A0)
  3273.  BLT.S  2$
  3274.  MOVE.B #'0',5(A0)
  3275.  ADDQ.B #1,4(A0)
  3276.  RTS
  3277.  
  3278. 2$
  3279.  ADDQ.B #1,5(A0)
  3280.  CMP.W  #'24',4(A0)
  3281.  BLT.S 99$
  3282.  MOVE.W #'00',4(A0)
  3283.  ADDQ.B #1,3(A0)
  3284.  CMP.B  #'9',3(A0)
  3285.  BLE.S  80$
  3286.  MOVE.B #'0',3(A0)
  3287.  ADDQ.B #1,2(A0)
  3288. 80$
  3289.  CMP.W  #'29',2(A0)
  3290.  BLT.S  99$
  3291.  CMP.W  #'02',(A0)   ;2
  3292.  BEQ.S  97$
  3293.  CMP.W  #'31',2(A0)  ;1,3,5,7,8,10,12
  3294.  BLT.S  99$
  3295.  BNE.S  97$
  3296.  CMP.W  #'11',(A0)   ;11
  3297.  BEQ.S  97$
  3298.  CMP.W  #'09',(A0)
  3299.  BNE.S  90$
  3300.  MOVE.W #'10',(A0)   ;9
  3301.  BRA.S  98$
  3302. 90$
  3303.  CMP.W  #'04',(A0)   ;4
  3304.  BEQ.S  97$
  3305.  CMP.W  #'06',(A0)   ;6
  3306.  BNE.S  99$
  3307. 97$
  3308.  ADDQ.W #1,(A0)
  3309. 98$
  3310.  MOVE.W #'01',2(A0)
  3311. 99$
  3312.  RTS
  3313.  
  3314.  
  3315. ***
  3316. TIME; fill 3 longwords with DAYS,MINS,SECS
  3317. *
  3318.  MOVEM.L A0/D1,-(SP)
  3319.  LEA.L  DAYCNT(A4),A0
  3320.  MOVE.L A0,D1
  3321.  MOVE.L (A4),A6
  3322.  JSR    _LVODateStamp(A6)
  3323.  LEA    DAYCNT+8(A4),A0
  3324.  MOVE.L (A0),D1
  3325.  CLR.W  (A0)+
  3326.  DIVU.W #50,D1         ;50 TICKS per second
  3327.  MOVE.W D1,(A0)        ;SEC
  3328.  MOVEM.L (SP)+,D1/A0
  3329.  RTS
  3330.  
  3331.  
  3332. ***
  3333. SETRTC; convert 3 longwords to readable form
  3334. *
  3335.  BSR    TIME
  3336.  MOVE.L DAYCNT(A4),D3  ;DAYS
  3337.  SUB.W  #1096,D3       ;REF 810101
  3338.  DIVU.W #1461,D3       ;365*4+1
  3339.  ASL.W  #2,D3          ;x4
  3340.  MOVE.W D3,YEAR(A4)
  3341.  CLR.W  D3
  3342.  SWAP.W D3
  3343.  CMP.W  #1154,D3  365*3+31+29-1 ex:880229
  3344.  BLT.S  2$
  3345.  SUB.W  #1095,D3  365*3
  3346.  SWAP.W D3
  3347.  ADDQ.W #3,D3
  3348.  MOVEQ  #29,D0
  3349.  BRA.S  3$
  3350.  
  3351. 2$
  3352.  MOVEQ  #28,D0
  3353.  DIVU.W #365,D3
  3354. 3$
  3355.  LEA.L  MONTHS(PC),A3
  3356.  MOVE.B D0,1(A3)        ;FEB leap year fix
  3357.  ADD.W  YEAR(A4),D3
  3358.  ADD.W  #81,D3
  3359.  MOVE.W D3,YEAR(A4)
  3360.  SWAP.W D3
  3361.  ADDQ.W #1,D3           ;1-1-XX = DAY 0
  3362.  CLR.W  MONTH(A4)
  3363.  CLR.L  D0
  3364. 4$
  3365.  ADDQ.W #1,MONTH(A4)
  3366.  MOVE.B (A3)+,D0
  3367.  SUB.W  D0,D3
  3368.  BGT.S  4$
  3369.  ADD.W  D0,D3
  3370.  MOVE.W D3,DAY(A4)
  3371.  
  3372.  MOVE.L DAYCNT+4(A4),D3 MINS
  3373.  DIVU.W #60,D3          ;60 minutes per hour
  3374.  MOVE.W D3,HOUR(A4)
  3375.  SWAP.W D3
  3376.  MOVE.W D3,MIN(A4)      ;Div remainder in MIN
  3377.  
  3378.  MOVE.L DAYCNT+8(A4),D3
  3379.  MOVE.W D3,SEC(A4)
  3380.  
  3381.  LEA    YEAR(A4),A0     ;YYMMDDHHMMSS
  3382.  LEA    TIMLIN(A4),A1
  3383.  MOVEQ  #4,D3
  3384. 7$
  3385.  MOVE.W (A0)+,D2
  3386.  BSR.S  PUT2D
  3387.  DBRA   D3,7$
  3388.  LEA    MPROMT(PC),A0
  3389.  MOVE.L TIMLIN+6(A4),(A0)
  3390.  RTS
  3391.  
  3392.  
  3393. PUT2D
  3394.  CLR.L  D0
  3395.  MOVE.W D2,D0
  3396.  DIVU   #10,D0
  3397.  BSR.S  2$
  3398.  SWAP.W D0
  3399. 2$
  3400.  ADD.B  #$30,D0
  3401.  MOVE.B D0,(A1)+
  3402.  RTS
  3403.  
  3404.  
  3405. ***
  3406. PATHER; Get path from file =>A0
  3407. *
  3408.  MOVE.L A0,A0SAV(A4)
  3409.  LEA    TMPMEM(A4),A1
  3410.  CLR.L  (A1)
  3411.  CMP.W  #'R:',(A0)
  3412.  BNE    GRTS
  3413.  LEA    MPATH(PC),A2
  3414.  MOVEQ  #11,D3          ;PATH:WA3MNT_
  3415. 0$
  3416.  MOVE.B (A2)+,(A1)+
  3417.  CMP.B  #'0',(A2)
  3418.  DBLT   D3,0$
  3419.  MOVE.B D4,(A1)+
  3420. 1$
  3421.  MOVE.B (A0)+,D0
  3422.  CMP.B  #'R',D0
  3423.  BNE.S  99$
  3424.  CMP.B  #':',(A0)
  3425.  BNE.S  99$
  3426. 2$
  3427.  MOVE.B (A0)+,D0
  3428.  CMP.B  D4,D0
  3429.  BLT    1$
  3430.  CMP.B  #'@',D0
  3431.  BNE    2$
  3432.  CMP.B  #':',(A0)
  3433.  BNE.S  5$
  3434.  ADDQ.L #1,A0
  3435. 5$
  3436.  MOVEQ  #5,D3
  3437. 7$
  3438.  MOVE.B (A0),D0
  3439.  CMP.B  #'0',D0
  3440.  BLT.S  8$
  3441.  MOVE.B (A0)+,(A1)+
  3442.  DBRA   D3,7$
  3443. 8$
  3444.  MOVE.B D4,(A1)+
  3445. 9$
  3446.  CMP.B  (A0)+,D4
  3447.  BLE    9$
  3448.  BRA    1$
  3449.  
  3450. 99$
  3451.  CLR.B  (A1)
  3452.  MOVE.B #$A,-(A1)
  3453.  SUBQ.L #1,A0
  3454.  MOVE.L A0,A0SAV(A4)
  3455.  RTS
  3456.  
  3457. ***
  3458. BIDMSG; Get $BID from Msg#
  3459. *
  3460.  MOVEM.L D0-D2/A0-A2,-(SP)
  3461.  MOVE.L A0,D1
  3462.  MOVE.L BID_R_FIB+12(A4),A0  ;Buff
  3463.  MOVE.L BID_R_FIB+16(A4),D0  ;Size
  3464.  BRA.S  2$
  3465. 1$
  3466.  SUBQ.L #1,D0
  3467.  BLE.S  99$            ;EOF, Call not found
  3468.  CMP.B  #$A,(A0)+
  3469.  BNE    1$
  3470. 2$
  3471.  MOVE.L A0,A2
  3472.  MOVE.L D1,A1
  3473.  MOVEQ  #4,D2
  3474. 3$
  3475.  CMP.B  (A0)+,(A1)+    ;Compare MSG#
  3476.  DBNE   D2,3$
  3477.  MOVE.L A2,A0
  3478.  BNE    1$             ;Try next
  3479.  CMP.B  #'$',7(A0)     ;Old
  3480.  BEQ.S  99$
  3481.  CLR.L  D0
  3482.  MOVE.B U_BID(A4),D0
  3483.  SUB.B  #$41,D0
  3484.  BMI.S  99$            ;Not a Bid User
  3485.  CMP.B  11(A2,D0),D4
  3486.  BNE.S  99$            ;Got already
  3487. 98$
  3488.  MOVE.L A2,BIDADR(A4)
  3489.  MOVEM.L (SP)+,D0-D2/A0-A2
  3490.  RTS
  3491.  
  3492. 99$
  3493.  SUB.L  A2,A2
  3494.  BRA    98$
  3495.  
  3496.  
  3497. ***
  3498. BIDCHK; Check for dupe $BID
  3499. *
  3500.  MOVE.L BID_R_FIB+12(A4),A0  ;Buff
  3501.  MOVE.L BID_R_FIB+16(A4),D0  ;Size
  3502.  BRA.S  2$
  3503. 1$
  3504.  SUBQ.L #1,D0
  3505.  BLE    GRTS           ;EOF, Call not found
  3506.  CMP.B  #$A,(A0)+
  3507.  BNE    1$
  3508. 2$
  3509.  MOVE.L A0,A6
  3510.  LEA    7(A0),A0
  3511.  CMP.B  #'$',(A0)      ;Old
  3512.  BEQ.S  25$
  3513.  LEA    38(A0),A0      ;45-7=38
  3514. 25$
  3515.  LEA    BIDBUF+45(A4),A1
  3516.  MOVEQ  #30,D3
  3517. 3$
  3518.  CMP.B  (A0)+,(A1)+    ;Compare Bid
  3519.  DBNE   D3,3$
  3520.  MOVE.L A6,A0
  3521.  TST.B  -(A1)
  3522.  BNE    1$             ;Try next
  3523.  RTS
  3524.  
  3525.  
  3526. ***
  3527. BIDADD; Add new Bid
  3528. *
  3529.  LEA    BIDBUF(A4),A0
  3530.  CLR.L  D0
  3531.  MOVE.B U_BID(A4),D0
  3532.  MOVE.L D0,D1
  3533.  SUB.B  #$41,D0
  3534.  BMI.S  0$
  3535.  MOVE.B D1,11(A0,D0)    ;A-Z
  3536. 0$
  3537.  LEA    45(A0),A1
  3538.  TST.B  (A1)+
  3539.  BEQ    GRTS
  3540. 1$
  3541.  TST.B  (A1)+
  3542.  BNE    1$
  3543.  SUBQ.L #1,A1
  3544.  SUBA.L A0,A1
  3545.  MOVE.L A0,D7       ;TOP_ADR
  3546.  MOVE.L A1,D6       ;TOP_SIZ
  3547.  
  3548.  LEA    BID_W_FIB(A4),A5
  3549.  BSR    A5_OPEN_WRITE
  3550.  BEQ    ABORTB      BIDERR
  3551.  MOVE.L D7,12(A5)   ;TOP_ADR
  3552.  MOVE.L D6,20(A5)   ;TOP_Bytes
  3553.  BSR    A5_WRITE    ;New on top
  3554.  BEQ    ABORTB      BIDERR
  3555. BIDWRI
  3556.  LEA    BID_R_FIB+12(A4),A6
  3557.  MOVE.L (A6)+,12(A5) ;Adr
  3558.  MOVE.L (A6),20(A5)  ;Bytes
  3559.  BSR    A5_WRITE
  3560.  BSR    A5_CLOSE
  3561.  CLR.B  BIDCHG(A4)
  3562.  BRA    BIDRED
  3563.  
  3564.  
  3565. ***
  3566. BIDUPD; Update old Bid
  3567. *
  3568.  MOVE.L BIDADR(A4),D0
  3569.  BEQ    BRTS
  3570.  MOVE.L D0,A0
  3571.  CMP.B  #'$',7(A0)
  3572.  BEQ    BRTS            ;Old
  3573.  CLR.L  D0
  3574.  MOVE.B U_BID(A4),D0
  3575.  MOVE.L D0,D1
  3576.  SUB.B  #$41,D0
  3577.  BMI    BRTS
  3578.  CMP.B  11(A0,D0),D4
  3579.  BNE    BRTS            ;Got already
  3580.  MOVE.B D1,11(A0,D0)    ;A-Z
  3581. * ADDQ.B #1,BIDCHG(A4)
  3582.  LEA    BID_W_FIB(A4),A5
  3583.  BSR    A5_OPEN_WRITE
  3584.  BNE    BIDWRI
  3585. BIDERR
  3586.  BSR    A5_CLOSE
  3587.  BRA    BIDRED
  3588.  
  3589.  
  3590. TIMSTR
  3591.  MOVEM.L A0/A1/D0/D7,-(SP)
  3592.  BRA.S  SETT1
  3593.  
  3594. ***
  3595. SETTIM; Start timer
  3596. *
  3597.  MOVEM.L A0/A1/D0/D7,-(SP)
  3598.  MOVE.L T_R(A4),A0
  3599.  MOVE.L $E(A0),A0       ;TIMERPORT
  3600.  MOVE.L 4,A6
  3601.  JSR    _LVOGetMsg(A6)
  3602.  MOVE.L D0,D0
  3603.  BEQ.S  SETT2           ;No Timeout
  3604.  
  3605. SETT1
  3606. * MOVE.B CLOCK2(A4),D0
  3607. * ADDQ.B #1,D0
  3608. * CMP.B  #60,D0
  3609. * BNE.S  0$
  3610. * MOVEQ  #0,D0
  3611. *0$
  3612. * MOVE.B D0,CLOCK2(A4)
  3613.  CLR.B  TIMFLG(A4)
  3614.  TST.B  DIEFLG(A4)
  3615.  BNE.S  SETT2
  3616.  MOVE.L T_R(A4),A1
  3617.  MOVE.W #9,$1C(A1)      ;io_Command=TR_ADDREQUEST
  3618.  MOVEQ  #1,D0
  3619.  MOVE.L D0,$20(A1)      ;Seconds
  3620.  CLR.L  $24(A1)         ;Micros
  3621.  MOVE.L 4,A6
  3622.  JSR    _LVOSendIO(A6)
  3623.  ADDQ.B #1,TIMFLG(A4)
  3624.  
  3625.  CMP.B  #5,BADCNT(A4)
  3626.  BGE.S  1$              ;Bad commands
  3627.  SUBQ.B #1,CLOCK1(A4)
  3628.  BNE.S  SETT2
  3629.  TST.B  C_RUN(A4)
  3630.  BEQ.S  SETT2
  3631. 1$
  3632.  ADDQ.B #1,DSCFLG(A4)
  3633.  CLR.B  BADCNT(A4)
  3634.  CLR.B  C_RUN(A4)
  3635.  LEA    MTIMOT(PC),A0
  3636.  BSR    PLIN_F_S_W
  3637.  LEA    TNCEND(PC),A0
  3638.  BSR    PLIN_S
  3639.  TST.B  B_RUN(A4)
  3640.  BNE    CMD_B
  3641. SETT2
  3642.  MOVEM.L (SP)+,A0/A1/D0/D7
  3643.  RTS
  3644.  
  3645.  
  3646. * SECTION data,DATA
  3647. TNCINI DC.B 1,'E N',$D,'U NONE',$D,'MCON N',$D,'STATS Y',$D
  3648.        DC.B 'MON N',$D,2,'A'
  3649. TNCCON DC.B 7,$D,'CONV',$D,0
  3650. MTIMOT DC.B '*** TIMEOUT/ERROR',$D,0
  3651. TNCEND DC.B 1,$19,$18,'D',$D,$19,$A,0
  3652. TNCDIS DC.B 1,$19,'D',$D,'MON Y',$D,'E Y',$D,'DA',$19,$D,0
  3653. TNCSWI DC.B 1,3,'A',7,$D,'CONV',$D,0
  3654. TNCSTA DC.B 1,'S',$D,0
  3655. TNCMH  DC.B 1,'MH',7,$D,'CONV',$D,0
  3656. MECHOY DC.B 1,7,$D,'E Y',$D,'CONV',$D,0
  3657. MECHON DC.B 1,7,$D,'E N',$D,'CONV',$D,0
  3658. MFWD   DC.B 'F>',$D,0
  3659. MAMIG1 DC.B '[Amiga-65-P1103-$]',$D,0
  3660. FMT1   DC.B '%6ld',0
  3661. FMT2   DC.B $A,7,'%1s%1s=%-6s%5ld BAUD',7,'%9ld%9ld%9lx',$A,0
  3662.  
  3663. MONTHS DC.B 31,28,31,30,31,30,31,31,30,31,30,31
  3664. MWELCM DC.B 'Welcome to AmigaBBS',$A,0
  3665. MS_TIT DC.B 'OK, Title for msg #',0
  3666. MS_MSG DC.B 'Send msg, ^Z to end:',$A,0
  3667. MLHEAD DC.B 'Msg# TS  Size To     From   @ BBS  Date  Time',$A,0
  3668. CTLZ   DC.B $1A,$A,0
  3669.  
  3670. MJ_BAD DC.B '*** J',$A,0
  3671. MK_BAD DC.B '*** K nnnn or KM',$A,0
  3672. ML_BAD DC.B '*** L or LM or LL nn',$A,0
  3673. MN_BAD DC.B '*** N NAME',$A,0
  3674. MR_BAD DC.B '*** R nnnn or RM',$A,0
  3675. MS_BAD DC.B '*** S CALL @ BBS',$A,0
  3676. MHUH   DC.B '*** R 1 for help',$A,0
  3677. MKILLD DC.B '*** KILLED',$A,0
  3678. MDONE  DC.B '*** Done',$A,0
  3679. MNONE  DC.B '*** None found',$A,0
  3680. MPATH  DC.B 'PATH:        ',0
  3681. MTALK  DC.B 'If here, I will call back after you disc',$A,0
  3682.  
  3683.  CNOP 0,2
  3684. *MBID
  3685. *DC.B'           abcdefghijklmnopqrstuvwxyz ',0
  3686. *     0123456789012345678901234567890123456789012345678901234567890
  3687. *     999999     abcdefghijklmnopqrstuvwxyz 880323$0000_N3ET
  3688.  CNOP 0,2
  3689. USR_NEW
  3690.  DC.B '        8701010000     0     0  NoName?',$A,0
  3691. *      WA3MNT..8610292400..0001..2359..RANDY^0
  3692. *      012345678901234567890123456789012345678901
  3693.  CNOP 0,2
  3694. MPROMT DC.B '     (B,J,K,L,N,R,S,T,V) >',$D,0
  3695.  CNOP 0,2
  3696. BBS_DIR  DC.B 'B:DIR',0
  3697. BBS_USR  DC.B 'B:USR',0
  3698. BBS_FWD  DC.B 'B:FWD',0
  3699. BBS_BID  DC.B 'B:BID',0
  3700. DOSP DC.L $4E334554 DOS Lib for exit
  3701.  
  3702.  END
  3703.  
  3704.